5.TextBox で数値しか入力できないように制限する(23_Txt_05) (旧、SampleNo.045) |
1.TextBox で数値しか入力できないように制限する(簡易型) 2.TextBox コントロールからクラスを派生させ[数値入力専用]のカスタムコントロールを作成 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし その他 : : このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.TextBox で数値しか入力できないように制限する(簡易型)(045) |
Imports System.Text.RegularExpressions Public Class Form1 Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress '- キーは先頭以外不許可 If TextBox1.Text.Length > 0 And e.KeyChar = "-"c Then Beep() 'エラー音 e.Handled = True Exit Sub End If '1個以上の . は、NG とする If TextBox1.Text.IndexOf("."c) >= 0 And e.KeyChar = "."c Then Beep() 'エラー音 e.Handled = True Exit Sub End If '(.-1234567890[Enter][BackSpace])しか入力できないように制限する(お好みで) If e.KeyChar >= Chr(Keys.Space) And e.KeyChar < "-"c Or e.KeyChar > "9"c Or e.KeyChar = "/"c Then Beep() 'エラー音 e.Handled = True Exit Sub End If End Sub Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave 'ペーストされた場合のチェック If TextBox1.Modified = True Then '細かく指定したいなら正規表現の方が便利かと。 If Not Regex.IsMatch(TextBox1.Text, "^-?[0-9\.]+$", RegexOptions.IgnoreCase) Then MessageBox.Show("数値以外が、含まれています") End If '1個以上の . は、NG とする Dim myText As String = TextBox1.Text.Replace(".", "") If TextBox1.Text.Length >= (myText.Length + 2) Then MessageBox.Show(". が余計に含まれています。") End If End If End Sub End Class |
2.TextBox コントロールからクラスを派生させ[数値入力専用]のカスタムコントロールを作成 |
作成要領は、既存のコントロールからクラスを派生させカスタムコントロールを作成するをご覧下さい。 Imports System.Windows.Forms Public Class NumericTextBox Inherits TextBox Protected Overrides Sub WndProc(ByRef m As Message) 'Const WM_CUT As Integer = &H300 'カット(P840) 'Const WM_COPY As Integer = &H301 'コピー(P837) Const WM_PASTE As Integer = &H302 'ペースト(P876) Const WM_CONTEXTMENU As Integer = &H7B 'ポップアップメニュー Const WM_CHAR As Integer = &H102 'キー操作が非システムキャラクターに変換された時に送られるメッセージ 'Const WM_RBUTTONUP As Integer = &H205 '右ボタンアップ Select Case m.Msg '数字しか入力できないように制限する Case WM_CHAR Dim e As New KeyPressEventArgs(Convert.ToChar(m.WParam.ToInt32)) '- キーは先頭以外不許可 If Me.Text.Length > 0 And e.KeyChar = "-"c Then Microsoft.VisualBasic.Beep() 'エラー音 e.Handled = True Return End If '1個以上の . は、NG とする If Me.Text.IndexOf("."c) >= 0 And e.KeyChar = "."c Then Microsoft.VisualBasic.Beep() 'エラー音 e.Handled = True Return End If '下記以外のキー入力は、NG とする If e.KeyChar >= Chr(Keys.Space) And e.KeyChar < "-"c Or e.KeyChar > "9"c Or e.KeyChar = "/"c Then Microsoft.VisualBasic.Beep() 'エラー音 e.Handled = True Return End If '下記メッセージが見つかったらその処理を何もしない。 '(必要に応じて、追加/削除 する事で、貼り付けだけ不許可にしたりとか。) Case WM_PASTE, WM_CONTEXTMENU ' ,WM_CUT, WM_COPY m.Result = IntPtr.Zero Exit Sub End Select MyBase.WndProc(m) '通常の処理をする End Sub End Class '1.IDE のメニューの[プロジェクト]→[クラスの追加]でクラスを追加 '2.クラスを追加するときに、Class1.vb を NumericTextBox.vb に変更して下さい。 '3.追加したクラスに、上記コードを貼り付けて下さい。 '4.エラーが発生するようでしたらどこか間違っている可能性がありますのでよく見直して下さい。 '5.次に、カスタムコントロールを使用する Form に下記コード記入して下さい。 Private WithEvents NumericTextBox1 As New NumericTextBox() Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '------------------------------------------------------------------------------ 'TextBox を継承した[数値入力専用]の TextBox With NumericTextBox1 .Font = New Font("MS ゴシック", 12, FontStyle.Regular) .Parent = Me .Bounds = New Rectangle(21, 109, 243, 27) .TextAlign = HorizontalAlignment.Right End With End Sub MSDN の方に、数値テキストボックスを作成する が掲載されているのでそちらも参考にして下さい。 (リンク切れの場合は、上記タイトルか NumericTextBox をキーに検索すれば見つかります。) |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
テキストボックス テキストボックス |