DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■33917 / inTopicNo.1)  TextBoxの最大バイトを超えた分の文字を消す際の不具合
  
□投稿者/ けい 一般人(11回)-(2018/07/13(Fri) 16:01:05)
  • アイコン環境/言語:[Windows10、VB.NET、.NET Framework4.6.1] 
    分類:[.NET] 

    お世話になります。

    Formに、TextBoxのtxtS1、txtS2を置いています。
    txtS1に入力できる文字数を、MaxLengthではなく、
    バイト数で制限したいと思います。
    ここでは10バイトとします(全角5文字、半角10文字)。
    10バイトを超えた場合は、txtS2にフォーカス移動します。

    txtS1のTextChangedイベントで、
    入力された文字のバイト数を確認し、
    10バイトを超えている場合は、
    10バイト以下になるまで、
    1文字ずつ末尾を削除していく、
    というコードを書きました。

    Private Sub txtS1_TextChanged(sender As Object, e As EventArgs) Handles txtS1.TextChanged
    Dim strS1 As String = ""
    Dim intLen As Integer = 0
    Dim intLenB As Integer = 0
    Dim s_jis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")

    strS1 = Trim(txtS1.Text)
    intLen = Len(strS1)
    intLenB = s_jis.GetByteCount(strS1)

    If intLenB > 10 Then
    Do Until intLenB <= 10
    strS1 = strS1.Substring(0, intLen - 1)
    intLen = Len(strS1)
    intLenB = s_jis.GetByteCount(strS1)
    Loop
    txtS1.Text = strS1
    txtS2.Focus()
    End If
    End Sub

    実際にこれを実行しますと、
    半角入力の場合は、正しく動きます。

    全角入力の場合は、入力している文字列の下に波線が出て、
    Enterを押した時に波線が消えて確定しますが、
    その結果に不具合があります。

    例えば、以下のようになってしまいます。

    「あああああ」→OK
    「あああああ1」→「あああああ」→OK
    「あああああ12」→「2ああああ」
    「あああああ123」→「32あああ」
    「あああああ1234」→「432ああ」
    「あああああ12345」→「5432あ」
    「あああああ123456」→「65432」
    「あああああ1234567」→「76543」
    ・・・

    という具合です。

    本来はすべて「あああああ」になるのが正しい結果です。

    何らかの規則性があることは分かるのですが、
    この原因が分かりません。

    コードで間違いがありましたら、
    ご教示頂けましたら幸いです。

    どうぞよろしくお願いします。

マルチポストを報告
違反を報告
引用返信 削除キー/
■33918 / inTopicNo.2)  Re[1]: TextBoxの最大バイトを超えた分の文字を消す際の不具合
□投稿者/ 魔界の仮面弁士 大御所(1129回)-(2018/07/13(Fri) 17:06:02)
  • アイコンNo33917に返信(けいさんの記事)
    > txtS1に入力できる文字数を、MaxLengthではなく、
    > バイト数で制限したいと思います。

    [入力可能な文字バイト数を設定する] by じゃんぬ
    http://uno036.starfree.jp/PRGmanual/vsnet_tips/textbox/maxbytelength.html
    http://jeanne.wankuma.com/library/maxbytelengthtextbox/source.html
違反を報告
引用返信 削除キー/
■33928 / inTopicNo.3)  Re[2]: TextBoxの最大バイトを超えた分の文字を消す際の不具合
□投稿者/ けい 一般人(12回)-(2018/07/22(Sun) 14:43:09)
  • アイコンNo33918に返信(魔界の仮面弁士さんの記事)

    ありがとうございます。

    まずは、RichTextBoxにすることで出来ましたが、
    参考にさせていただきます。
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -