VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -