【Spread Sheet 应用(四)】字节数入力限制

    Imports FarPoint.Win.Spread

    
Dim enc As System.Text.Encoding
    
Dim WithEvents datamodel As Model.DefaultSheetDataModel

    
Private Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles MyBase.Load
      enc 
= System.Text.Encoding.GetEncoding("shift-jis")
      datamodel 
= FpSpread1.Sheets(0).Models.Data
      
Dim tCell As New CellType.TextCellType
      tCell.MaxLength 
= 10
      FpSpread1.Sheets(
0).Cells(00).CellType = tCell
    
End Sub

    
Private Sub FpSpread1_EditChange(ByVal sender As ObjectByVal e As EditorNotifyEventArgs) Handles FpSpread1.EditChange
      
''編集中の入力制御
      Try
        
If TypeOf (e.View.GetSheetView.ActiveCell.CellType) Is CellType.TextCellType Then
          
Dim tCell As CellType.TextCellType = e.View.GetSheetView.ActiveCell.CellType
          
Dim s As String = e.EditingControl.Text
          
If enc.GetByteCount(s) > tCell.MaxLength Then
            e.EditingControl.Text 
= enc.GetString(enc.GetBytes(s), 0, tCell.MaxLength)
            
CType(e.EditingControl, CellType.GeneralEditor).SelectionStart = e.EditingControl.Text.Length
          
End If
        
End If
      
Catch
      
End Try
    
End Sub

    
Private Sub datamodel_Changed(ByVal sender As ObjectByVal e As Model.SheetDataModelEventArgs) Handles datamodel.Changed
      
''非編集状態でクリップボードから貼り付けした場合
      If e.Type = Model.SheetDataModelEventType.CellsUpdated Then
        
Try
          
If TypeOf (FpSpread1.Sheets(0).ActiveCell.CellType) Is CellType.TextCellType Then
            
Dim tCell As CellType.TextCellType = FpSpread1.Sheets(0).ActiveCell.CellType
            
Dim s As String = datamodel.GetValue(e.Row, e.Column)
            
If enc.GetByteCount(s) > tCell.MaxLength Then
              s 
= enc.GetString(enc.GetBytes(s), 0, tCell.MaxLength)
              datamodel.SetValue(e.Row, e.Column, s)
            
End If
          
End If
        
Catch
        
End Try
      
End If
    
End Sub