VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 テキストボックス関係のメニュー
1.テキストボックスにフォーカスが移動した時にカーソルを指定位置に設定
2.テキストボックスに数値しか入力出来ないように制限する
3.フォーカスのあるテキストボックスを視覚化する
4.テキストファイル読み込み表示及びテキストボックスのデータを保存
5.テキストボックスの総行数・現在行・現在桁の取得
6.複数行テキストボックスの指定行の文字列を取得する
7.SendInputV6.dll を使っての Enter キーでのフォーカス移動
8.テキストボックスへの貼り付け防止(DLLを使用しての簡単なサブクラス化)
9.テキストボックスで縦方向中央揃え・下揃え・上揃えをする
10.エクセルファイル(.xls)をテキストボックスに表示及び編集保存する
11.2つのテキストボックスのスクロールの同期を取る改良版
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載しているテキストボックスに関するサンプル


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 イベントで数値以外の入力を監視する方法



このページのトップへ移動します。