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

入力制限テキストボックスについて

分類:[.NET]

 VB.NETで入力可能文字をプロパティなどで設定できるテキストボックスコントロールを
作成しようとしています。
 キーボード入力だけではなく、コピー貼付にも対応しなければならないため、
入力文字の検査をTextChangedイベント発生時に行うようにしました。

@TextChangedイベント発生
A入力文字種チェック
B入力文字が入力可能文字に設定されていなければ、変更前の文字に戻す

上記の処理を実装し、いざテキストボックスに文字を貼り付けると、
一瞬文字が貼り付けられて → 元の状態に戻る。
というのが眼で見えてしまい具合がよくありません。

 どなたかよい解決方法をご存知ないでしょうか。

TextBoxのWndProcメソッドをオーバーライドして
WM_PASTEメッセージを拾うのはどうでしょう
サンプルでは貼り付け後に10文字を超える場合に元に戻すようにしています


Private Const WM_PASTE As Integer = &H302
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_PASTE Then
Dim strBuff As String = Me.Text
Dim intBuff As Integer = Me.SelectionStart
MyBase.WndProc(m)
If Me.Text.Length > 10 Then
Me.Text = strBuff
Me.SelectionStart = intBuff
End If
Else
MyBase.WndProc(m)
End If
End Sub
以下のようなやり方ではどうでしょうか?

@テキストボックスの文字列を退避
ATextChangedイベント発生
B退避しておいた文字列を必ず表示する
C入力文字種チェック
D入力文字が入力可能文字であれば、テキストを表示
レスありがとうございます。
早速試してみます。
解決済み!

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