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

メニューへ戻ります。 TextBox コントロール関係のメニュー
1.TextBox コントロールに関するワンポイントテクニック集
2.TextBox コントロールへのフォーカス移動時の操作色々
3.TextBox でコピー・貼り付け・切り取り・元に戻す他 
4.Enter キー及び↑↓キーによるフォーカス移動 
5.TextBox で数値しか入力できないように制限する
6.TextBox における総行数・現在行・現在桁の取得
7.TextBox で行毎テキストの操作色々
8.テキスト中に異種文字が混在していないかを調べる
9.テキストファイルを読み込み TextBox に表示及び保存
10.TextBox のテキストを複数ページにわたっての印刷
11.
12.
 . 
20.その他、当サイト内に掲載の TextBox コントロールに関するサンプル 


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.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
テキストボックス テキストボックス




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