2.テキストボックスに数値しか入力出来ないように制限する |
1.テキストボックスで数値しか入力できないように制限する(簡易型) 2.テキストボックスの Change イベントで数値以外の入力を監視する方法 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:なし その他 : : |
1.テキストボックスで数値しか入力できないように制限する(簡易型) |
テキストボックスに入力する方法として下記のような方法がある。 1.キーボードから直接入力する 2.Ctrl + V による貼り付け 3.IME からの入力 4.Shift + Insert による貼り付け 5.テキストボックス上で右クリックでポップアップメニューを表示しての貼り付け 6.アプリケーションキー + Shift + F10 によるポップアップメニューの表示 Private Sub Text1_KeyPress(KeyAscii As Integer) '数値しか入力できないように制限する(簡易型) If KeyAscii >= 32 And KeyAscii < 45 Or KeyAscii > 57 Or KeyAscii = 47 Or KeyAscii = 22 Then Beep 'エラー音 KeyAscii = 0 '入力キーを無効にする End If End Sub KeyAscii >= 32 は[Enter]キーや[BackSpace]キーを使えるようにしている。 3 = Ctrl + C 22 = Ctrl + V 24 = Ctrl + X 26 = Ctrl + Z 又、マイナスキーやコンマが入力できます。 ASCIIコード表は、ヘルプで「ASCII 文字セット」を検索して下さい WEB 上でよく見かける方法に、マイナスキーやコンマが入力できるようにして、Ctrl + V による貼り付け防止を追加しております。3.IME からの入力については、プロパティの設定で、Text1.IMEMode = 3 にすることで防止できますので、上記の簡易型の方法では、1.〜3.までに入力には対応できます。 但し、上記のような入力拒否だけでは、根本的な方法とは言えません、例えば、1.-2-..--3 のような数値なら入力できてしまうので、入力されたデータが正しいものであるかどうかのチェックは欠かせません。 貼り付けを防止するには、サブクラス化してメッセージを処理するのが一番ですが、VB6.0 からサブクラス化する場合は、ある程度の知識がないと色々問題が発生するので、お勧めできませんが、別途、掲載しているプログラマのメモ帳(中嶋さん)さんのサイトに公開されていた DLL を使うと安全且つ簡単に処理できます。 |
2.テキストボックスの Change イベントで数値以外の入力を監視する方法 |
Option Explicit 'SampleNo=069 2002.05.15 Private Sub Text2_Change() Dim Result As Boolean Result = fTextBoxNumberCheck(Text2) '又は簡略化して fTextBoxNumberCheck Text2 End Sub Private Function fTextBoxNumberCheck(ByVal MyTextBox As TextBox) As Boolean Dim i As Long '戻り値を初期値に設定 fTextBoxNumberCheck = False '入力文字を1文字づつチェック For i = 1 To Len(MyTextBox) '最初の1文字目以外に-が入っていたら削除 If Mid$(MyTextBox, i, 1) = Chr$(45) And i <> 1 Then fTextBoxNumberCheck = True '- を文字列から抜き取りテキストボックスに代入 MyTextBox = Mid$(MyTextBox, 1, i - 1) & _ Mid$(MyTextBox, i + 1, Len(MyTextBox) - i) Beep 'カーソル位置をテキストの末尾へ MyTextBox.SelStart = Len(MyTextBox.Text) 'フォーカスを元のテキストボックスに戻す MyTextBox.SetFocus Exit Function End If '0〜9 - . 及び Enter Tab 等の制御文字以外を削除 If Mid$(MyTextBox, i, 1) >= Chr$(32) And Mid$(MyTextBox, i, 1) < Chr$(45) Or _ Mid$(MyTextBox, i, 1) > Chr$(57) Or Mid$(MyTextBox, i, 1) = Chr$(47) Then '文字が含まれていたら True に設定 fTextBoxNumberCheck = True '以下上記同様の処理 MyTextBox = Mid$(MyTextBox, 1, i - 1) & Mid$(MyTextBox, i + 1, Len(MyTextBox) - i) Beep MyTextBox.SelStart = Len(MyTextBox.Text) MyTextBox.SetFocus Exit Function End If Next i End Function テキストボックスを監視して数字以外が入力されたら削除する関数、- や . は入力可で貼付にも対応している。 使用方法は設定するテキストボックスの Change イベントに fTextBoxNumberCheck Text1 のようにそのテキストボックスを指定するだけでOKです。 数字以外が入力されていたら抜出して、Text1.Text に返します。 関数の戻り値は数字以外が入力されていたら True が返ります。 この方法は、入力されてからチェックしているのでどの方法で入力されても関係がありません。 又、許可する場合と拒否する場合が好きなように設定できます。 (. の位置や個数等 IP アドレスのような場合など目的により追加/変更して下さい。) |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
テキストボックスで数値しか入力できないように制限する テキストボックスの Change イベントで数値以外の入力を監視する方法 |