- - PR -
テキストボックスの文字数制限について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-06-08 12:14
初めて投稿します。VB.net2002での開発で、テキストボックスの文字数制限について、悩んでいます。どなたかお力添えをよろしくお願いします。
テキストボックスの入力文字数をバイト単位で制限したいのですが、 キーボードからの制限については、過去スレ等から検索し、以下のようにして 制限することが出来ました。(50バイトまで入力できる様にしてあります) Private Sub TextBox7_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles TextBox7.KeyPress Dim SJIS As System.Text.Encoding SJIS = System.Text.Encoding.GetEncoding("Shift_Jis") If SJIS.GetByteCount(TextBox7.Text) > 50 Then TextBox7.Text = SJIS.GetChars(SJIS.GetBytes(TextBox7.Text), 0, 50) TextBox7.SelectionStart = Len(TextBox7.Text) End If End Sub しかし、コピーペーストをされると、 制限文字数以上張り付いてしまいます。どのような方法をとれば、ペースト 時の制限が出来るでしょうか? | ||||
|
投稿日時: 2004-06-08 20:18
諸農です。
入力時リアルタイムでチェックを行いたいという事ですか? そうではないのでしたら、Validatingイベントハンドラを 使ってもいいかと思います。 コピー貼り付けの時に発砲されるかどうかを試していませんが、 TextChangedイベントハンドラも使えるかもしれませんね。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-06-08 21:26
書込みありがとうございます。
引用:--------------- コピー貼り付けの時に発砲されるかどうかを試していませんが、 TextChangedイベントハンドラも使えるかもしれませんね。 -------------------- 使えました。もっといろいろ試してみるべきですね、すいません。 TextChangedイベント内に、オーバーした文字を切り取る処理を 入れたら、あっさりとうまくいきました。 ところで、連続の質問で、申し訳ないのですが、 Stringの改行コード(0x0a0d)[2バイト]を1バイトの(0x0a)に置換する ということって、できるのでしょうか? Stringで "555改行666改行777" という文字列を Encoding.GetBytesすると、 "53""53""53""13""10""54""54""54""13""10""55""55""55" となるのですが、これを、 "53""53""53""10""54""54""54""10""55""55""55" のようにしたいのです。 過去スレを参考に(C#なんですかね?)、 strKaigyoari.Replace("¥r¥n","¥n") のようなことをやってみましたが、ダメでした。 いろいろ考えているのですが、よい方法が分かりません。 何かうまい方法がありましたら、ご教授ください。 よろしくお願いします。 | ||||
|
投稿日時: 2004-06-08 22:28
諸農です。
VBは全然判りませんが(^^;)
過去ログによると、VB.NETの場合は、 vbCrLfとvbCrが使えるそうですが。。 #ちなみに、アップされたコード、 制御文字が全角になっていますよ。。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-06-08 22:50
Jubeiさん度々ありがとうございます。
早速試してみたところ、 strKai = strKai.Replace(vbCrLf, vbLf) で、またまたあっさり解決しました。 本当にありがとうございました。 ちなみに制御文字は、半角でやっておりました(^^ | ||||
|
投稿日時: 2004-06-09 08:32
脱線:蛇足:
制御文字っていうか、"¥"は全角でないと、「引用」の「引用」をすると消えちゃうんですよね。。。 | ||||
|
投稿日時: 2004-06-09 09:24
遅レスかもしれませんが、こんなのはどうでしょうか?
TextChangedイベント時にバイト数制限ができます。 Private Const EncodeType As Integer = 932 '"Shift_JIS" Private m_MaxLengthB As Integer = 7 'S-JIS用バイト数 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Dim intLength As Integer = System.Text.Encoding.GetEncoding(EncodeType).GetByteCount(TextBox1.Text) If m_MaxLengthB < intLength Then Dim StrB As Byte() = System.Text.Encoding.GetEncoding(EncodeType).GetBytes(TextBox1.Text) TextBox1.Text = System.Text.Encoding.GetEncoding(EncodeType).GetChars(StrB, 0, m_MaxLengthB) TextBox1.SelectionStart = m_MaxLengthB End If End Sub | ||||
|
投稿日時: 2004-06-09 09:30
もう解決された後ですけど、余談として。
VB.NETでは、言語としては、C#のような"¥n"という形のエスケープ文字は使えません。 (正規表現とかを話すと、話がややこしくなるので割愛。)
|