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

 


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

nice!の受付は締め切りました

コメント 0

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。