C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: テキストボックスのバイト数制限


(過去ログ 58 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■32926 / inTopicNo.1)  テキストボックスのバイト数制限
  
□投稿者/ マジョラム (17回)-(2009/02/17(Tue) 20:32:42)

分類:[VB.NET/VB2005 以降] 

テキストボックスでバイト数での制限をかけたいのですが、
txtbox_KeyPressでバイト数を超えた場合(16バイト)に、e.Handled = Trueにしているのですが、
全角の入力の場合に、追加で2バイト分入力されてしまいます。
どのように対応すべきなのでしょうか?

    Private Sub txtbox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtbox.KeyPress
        Dim SJIS As System.Text.Encoding
        SJIS = System.Text.Encoding.GetEncoding("Shift_JIS")

        If SJIS.GetByteCount(txtbox.Text) > 16 _
            AndAlso e.KeyChar <> Chr(Keys.Back) Then
            txtbox.Text = SJIS.GetChars(SJIS.GetBytes(txtbox.Text), 0, 16)
            txtbox.SelectionStart = Len(txtbox.Text)
            e.Handled = True
        End If

    End Sub

引用返信 編集キー/
■32936 / inTopicNo.2)  Re[1]: テキストボックスのバイト数制限
□投稿者/ やじゅ (944回)-(2009/02/17(Tue) 23:20:53)
やじゅ さんの Web サイト
No32926 (マジョラム さん) に返信

> 全角の入力の場合に、追加で2バイト分入力されてしまいます。
> どのように対応すべきなのでしょうか?
>

TextChangeイベントでGo! 
KeyPressだと貼り付け(クリップボードからペースト)したら桁数チェックされないよね。
引用返信 編集キー/
■32939 / inTopicNo.3)  Re[2]: テキストボックスのバイト数制限
□投稿者/ Azulean (297回)-(2009/02/17(Tue) 23:49:38)
Unicodeでしか表せない文字とか貼り付けられたらどうなるんだろうとか気になりますね。

本当にどうしようもないなら仕方ないのかもしれませんが、入力時点で制限するのではなく、OKボタンとか確定する時点でエラーチェックした方が楽かもしれません。
引用返信 編集キー/
■32948 / inTopicNo.4)  Re[3]: テキストボックスのバイト数制限
□投稿者/ 太郎冠者 (6回)-(2009/02/18(Wed) 08:49:02)
既にある物を使うのも手です
http://jeanne.wankuma.com/library/maxbytelengthtextbox/
引用返信 編集キー/
■32951 / inTopicNo.5)  Re[1]: テキストボックスのバイト数制限
□投稿者/ biac (53回)-(2009/02/18(Wed) 09:41:16)
biac さんの Web サイト
> 全角の入力の場合に、追加で2バイト分入力されてしまいます。

> Private Sub txtbox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtbox.KeyPress

> If SJIS.GetByteCount(txtbox.Text) > 16 _

ちゃんとデバッグしましょう。

txtbox_KeyPress() に入ってきた時点で、 txtbox.Text の値は想定した通りになっていますか?
フォームにラベルを貼り付けてそこに書き出すなり、 Console.WriteLine() するなり。
※ キーイベントやマウスイベントの処理中は、 デバッガでブレークさせないほうがいいです。


> txtbox.Text = SJIS.GetChars(SJIS.GetBytes(txtbox.Text), 0, 16)

全角しか入力させないのですか?
※ それならそれで、 半角チェックが必要ですけど。

全角・半角混在入力なら…
たとえば、「123456789012345六」を Shift JIS に変換して、 16バイトで切ったらどうなると思いますか?

あと、 Azulean さんが指摘されてるように、 Shift JIS に変換できない文字はどうしますか?
そういう文字は SJIS.GetBytes(txtbox.Text) した時点で '?' とかに化けます。



# そして、 WPF になると… IME で変換してる途中の候補文字列まで、 ガンガン TextChanged イベントに飛んで来る ( "123" と打って変換してる最中に 「壱百弐拾参」 が飛んできたりする ) …orz
ttps://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=332165
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -