[リストへもどる]
一括表示

投稿時間:2003/01/23(Thu) 20:36
投稿者名:はらだ
URL :
タイトル:
TextBoxでのバイト数による入力制限について
お世話になっております。
はらだと申します。

VB.netでの質問です。
TextBoxに対して、MaxLengthプロパティ値をバイト数として入力制限を設けたいのですが、
良い方法が見つかりません。
その際に、Validatedイベントで検証するのではなく、従来のVB6.0のようにキー入力自体を
受け付けないようにしたいと考えています。

既に、質問されている内容かとは思うのですが、検索をしても上手くヒットしません。
そこで、ご存知の方がいらしたら、教えて頂けないでしょうか。

サンプルコードを載せておきますので、よろしくお願いいたします。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox.TextChanged
    'テキストボックス内のバイト数
    Dim intByteLength As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(TextBox.Text)
    'テキストエディタ内の文字数
    Dim intLength As Integer = TextBox.Text.Length

    Dim strText As String = New String(TextBox.Text)
    Do Until intByteLength <= TextBox.MaxLength
        strText = strText.Substring(0, strText.Length - 1)
        intByteLength = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(strText)
    Loop
    TextBox.Text = strText
End Sub

投稿時間:2003/01/24(Fri) 10:39
投稿者名:takk
Eメール:
URL :
タイトル:
Re: TextBoxでのバイト数による入力制限について
VB.NETだとAPIでのバイト制限がうまく行かないんですよね。
僕の場合はこんな風にやってます。
以下のソースで試してみてください。

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Dim sData As String, sBuff As String
        Dim iPos As Integer, iMax As Integer, iLen As Integer, iBuff As Integer
        Dim bNowChange As Boolean

        If bNowChange Then Exit Sub

        bNowChange = True

        iPos = sender.SelectionStart
        iMax = sender.MaxLength
        sData = sender.Text
        iLen = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData)

        If iLen > iMax Then
            'MaxLength(Byte)をオーバーしていたら
            iBuff = iMax - iPos

            If iBuff <= 0 Then
                '後ろを削除
                Do Until (System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData) <= iMax)
                    sData = sData.Substring(0, sData.Length - 1)
                Loop
            Else
                '現在位置より前を削除
                sBuff = sData.Substring(iPos)
                iLen = iMax - System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sBuff)

                Do Until (System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData) <= iLen)
                    sData = sData.Substring(0, sData.Length - 1)
                Loop

                iPos = sData.Length
                sData = sData & sBuff
            End If

            '結果を返す
            sender.Text = sData
            sender.SelectionStart = iPos
        End If

        bNowChange = False
    End Sub

投稿時間:2003/01/24(Fri) 10:42
投稿者名:takk
Eメール:
URL :
タイトル:
Re^2: TextBoxでのバイト数による入力制限について
すみません、一部間違ってました。

>         Dim bNowChange As Boolean

        Static bNowChange As Boolean

でお願いします。

投稿時間:2003/01/24(Fri) 15:03
投稿者名:はらだ
URL :
タイトル:
お礼: TextBoxでのバイト数による入力制限について
takkさん。
いつも、ありがとうございます!

早速、解析をさせていただきます。
今後ともよろしくお願いいたします。

投稿時間:2003/01/24(Fri) 12:18
投稿者名:重複
Eメール:
URL :
タイトル:
Re: TextBoxでのバイト数による入力制限について
http://www2j.biglobe.ne.jp/~little-g/cgi-bin/choshoqa.cgi
#134 テキストボックスの入力桁数の制限 (バイト指定)
OH! NO! 2003年1月23日(木)16:57
マルチ 駄目。返事待つ

投稿時間:2003/01/24(Fri) 13:15
投稿者名:はらだ
URL :
タイトル:
Re^2: TextBoxでのバイト数による入力制限について
> http://www2j.biglobe.ne.jp/~little-g/cgi-bin/choshoqa.cgi
> #134 テキストボックスの入力桁数の制限 (バイト指定)
> OH! NO! 2003年1月23日(木)16:57
>  マルチ 駄目。返事待つ

重複さん。
失礼ですが、上記の質問については私ではありません。