記事一覧

数字のみ入力できるテキストボックス

ずいぶんと間があいてしまいました。すみません。

最近、少しわけあってVB.NET(.NET 3.0)で開発をしています。

設定画面で「数字を数ケタ入力する」項目があり、どのような方法で入力させるか、ということに迷い、とりあえずテキストボックスを利用しました。そこで利用したコードを載せておきます。

Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
    sender.Text = StrConv(sender.Text, VbStrConv.Narrow)
End Sub

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    If (System.Text.RegularExpressions.Regex.Match(sender.Text, "\D|![0123456789]").Value <> "") Then
        Dim SS As Integer = TextBox1.SelectionStart
        sender.Text = System.Text.RegularExpressions.Regex.Replace(sender.Text, "!(\d|[0123456789])", "")
        If SS > 0 Then
            TextBox1.SelectionStart = SS - 1
        End If
    End If
End Sub

入力内容の変更が確定されたときに数字以外の文字が入っていないかチェック、入っていたらカーソルの位置を記録して余計な文字を排除、処理後にカーソルの位置を元に戻すというものです。
この方法の場合、コピー&ペーストへの対策もできます。

またフォーカスが外れたときに全角数字を半角数字に変換する処理も入れました。

そこそこ使いやすいものになったので、とりあえずこれを使っています。

#VB.NETはやっぱ色々厳しいですね・・・

コメント

コメントの投稿

非公開コメント

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。