TextBox に数字しか入力できないようにしたい ~AddHandlerでイベント追加~ [コントロール]
----------------------------------------------------------
(開発・実行環境)
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
----------------------------------------------------------
DBのデータ型が数値型なのに、文字列が入力できたり、数値で集計するデータに文字列が入るとマズいわけで。
TextBoxに数字以外の入力制限をかけたいわけです。
TextBoxのKeyPress イベントにて、
数値であるか否か
http://jeanne.wankuma.com/tips/vb.net/char/isdigit.html
制御文字であるか否か(EnterとかTabとか)
を判断し、数値と制御文字でなければ、処理をキャンセルします。
以下、ソース。
If (Not (Char.IsDigit(e.KeyChar) _
Or Char.IsControl(e.KeyChar) _
Or (e.KeyChar = Chr(46)))) Then
e.Handled = True
End If
chr(46)は「.」。
http://higasumi.blog100.fc2.com/blog-category-17.html
今回は整数だけど、小数点使うなら、
「.」が文字の中に存在するか否か(二個以上「.」を出したくない)
先頭が「.」じゃないか
の制御も必要になってきますね。
e.Handled = True で、イベントのキャンセル。
http://d.hatena.ne.jp/annin102/20070303/1172936508
さて、実装。
自分、今までは作業をするたびにイベントを実行していたのですが。。。
イベントプロシージャのHandles以下を消去してあげる。
Private Sub TextBox_KeyPress( _
ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs)
こいつを、AddHandlerステートメントをFormのLoadイベント等で追加してあげる。
AddHandler TextBox1.KeyPress, AddressOf TextBox_KeyPress
こうすると、Load時にイベントプロシージャを通るだけで、イベントごとにいちいち処理を通さない。
なんかよさげ☆
(追記:勘違いだったっぽい。。普通のサブルーチンと同じような扱い方ができる、ってメリットがあるかな。)
そして、AddHandlerステートメントを呼び出す関数をグローバルで(共通モジュール等で)もってあげれば、
イベントをグローバル(共通)関数として、色んな場所から同じ処理を呼んであげられる。
今までイベントは全部ローカルでやっていたので。。。
これからはもう少しサクサク作れるようになるぞぃ♪
以下、参考。
http://dobon.net/vb/dotnet/beginner/eventhandle.html
こんなんもあったけど、はてさて。。。?
http://dobon.net/vb/dotnet/control/numerictextbox.html
コメント 0