文字列型セルで入力可能バイト数を設定するには?

文書番号 : 11871     文書種別 : 使用方法     最終更新日 : 2004/01/14
文書を印刷する
対象製品
El Tabelle for .NET
詳細
El Tabelle の文字列型セル(TextEditor)では、入力可能文字数を文字単位でしか設定できません。これは .NET Framework が Unicode ベースで動作していることに基く制限です。
しかし、InputMan for .NET の Edit コントロールには最大文字数を最大バイト数とするための LengthAsByte プロパティが備わっています。El Tabelle でも将来のバージョンでこの機能を実装することを検討しています。

現状、最も LengthAsByte プロパティに近い処理は、次のようにセルの編集確定時に
文字列をバイト単位で評価し、整形する処理となります。

[Visual Basic]
'あらかじめ、Form にテキストボックスとシートを配置する
Private Sub Sheet1_LeaveEdit(ByVal sender As Object, _
  ByVal e As GrapeCity.Views.ElTabelle.LeaveEditEventArgs) _
  Handles Sheet1.LeaveEdit

  '文字列型セルの場合のみ処理する
  If Sheet1.ActiveCell.Editor.GetType.ToString = "GrapeCity.Win.Editors.TextEditor" Then
    '制限するバイト数
    Dim intMaxLengthAsByte As Integer = 5
    If System.Text.Encoding.GetEncoding("Shift-JIS").GetByteCount( _
     Sheet1.ActiveCell.Text) >= intMaxLengthAsByte Then
      Dim bytSourceString() As Byte
      Dim bytDestString() As Byte

      bytSourceString = System.Text.Encoding.Unicode.GetBytes( _
       Sheet1.ActiveCell.Text)
      bytDestString = System.Text.Encoding.Convert( _
       System.Text.Encoding.Unicode, _
       System.Text.Encoding.GetEncoding("Shift-JIS"), bytSourceString)

      '指定したバイト数を超える入力が行われた場合
      If bytDestString.Length - 1 >= intMaxLengthAsByte Then
        ReDim Preserve bytDestString(intMaxLengthAsByte - 1)
      End If

      'テキストボックスに値をコピーし、表示不可能な文字を除去する
      TextBox1.Text = System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bytDestString)
      Sheet1.ActiveCell.Text = TextBox1.Text
    End If
  End If
End Sub


なお、この処理では2バイト文字が1バイトに分割された場合に生じる、不要なデータの除去にテキストボックスの機能を利用しています。Windows のバージョンによってテキストボックスの機能が変化する場合、この処理が正しく動作しない恐れがあることにご注意ください。
キーワード
HowTo

この文書は、以前は次のFAQ IDで公開されていました : 3643