- PR -

テキストボックスの文字数制限について

投稿者投稿内容
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 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

しかし、コピーペーストをされると、
制限文字数以上張り付いてしまいます。どのような方法をとれば、ペースト
時の制限が出来るでしょうか?
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-08 20:18
諸農です。

入力時リアルタイムでチェックを行いたいという事ですか?
そうではないのでしたら、Validatingイベントハンドラを
使ってもいいかと思います。

コピー貼り付けの時に発砲されるかどうかを試していませんが、
TextChangedイベントハンドラも使えるかもしれませんね。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 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")

のようなことをやってみましたが、ダメでした。
いろいろ考えているのですが、よい方法が分かりません。
何かうまい方法がありましたら、ご教授ください。
よろしくお願いします。

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-08 22:28
諸農です。

VBは全然判りませんが(^^;)

引用:

strKaigyoari.Replace("¥r¥n","¥n")



過去ログによると、VB.NETの場合は、
vbCrLfとvbCrが使えるそうですが。。

#ちなみに、アップされたコード、
 制御文字が全角になっていますよ。。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 2004-06-08 22:50
Jubeiさん度々ありがとうございます。
早速試してみたところ、

strKai = strKai.Replace(vbCrLf, vbLf)

で、またまたあっさり解決しました。
本当にありがとうございました。

ちなみに制御文字は、半角でやっておりました(^^
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-09 08:32
脱線:蛇足:
引用:

Jubeiさんの書き込み (2004-06-08 22:28) より:

#ちなみに、アップされたコード、
 制御文字が全角になっていますよ。。


 制御文字っていうか、"¥"は全角でないと、「引用」の「引用」をすると消えちゃうんですよね。。。
ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 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
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-06-09 09:30
もう解決された後ですけど、余談として。

VB.NETでは、言語としては、C#のような"¥n"という形のエスケープ文字は使えません。
(正規表現とかを話すと、話がややこしくなるので割愛。)
コード:
Console.WriteLine("hogehoge\r\nhogehoge")

をコンソールアプリケーションで、VB.NETとC#それぞれで実行すれば、その違いが分かります。

スキルアップ/キャリアアップ(JOB@IT)