1

私はこれについていくつかの調査を行いましたが、それでも私のプログラムを機能させることができません。テキストボックスをチェックして、ユーザー入力が数値であるかどうかを確認する必要があります(「。」または「/」を除く)

これまでの私のコード、

 Private Sub Num1_KeyPress(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Num1.KeyPress
    Dim UserEntry As Boolean
    If UserEntry = IsNumeric(False) Then
        MessageBox.Show("That's not numeric!")
    End If
End Sub
4

7 に答える 7

8

TextChangedを処理し、1文字ではなく整数をチェックすることをお勧めします。

Private Sub Num1_TextChanged(sender As Object, e As TextChangedEventArgs) Handles Num1.TextChanged
        If IsInputNumeric(Num1.Text) Then
            'handle numeric input
        Else
            'handle not a number
        End If
    End Sub

    Private Function IsInputNumeric(input As String) As Boolean
        If String.IsNullOrWhiteSpace(input) Then Return False
        If IsNumeric(input) Then Return True
        Dim parts() As String = input.Split("/"c)
        If parts.Length <> 2 Then Return False
        Return IsNumeric(parts(0)) AndAlso IsNumeric(parts(1))
    End Function
于 2013-03-15T02:29:08.343 に答える
3

私はあなたがイベントを使用する方が良いと思いますTextBox.KeyUp、それは合格しKeyEventArgsます。これを試して :

Private Sub Num1_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles Num1.KeyUp

    Dim isDigit As Boolean = Char.IsDigit(ChrW(e.KeyValue))
    Dim isKeypadNum As Boolean = e.KeyCode >= Keys.NumPad0 And e.KeyCode <= Keys.NumPad9
    Dim isBackOrSlashOrPeriod As Boolean = (e.KeyCode = Keys.Decimal Or e.KeyCode = Keys.Oem2 Or e.KeyCode = Keys.Back Or e.KeyCode = Keys.OemPeriod)

    If Not (isDigit Or isKeypadNum Or isBackOrSlashOrPeriod) Then
        MessageBox.Show("That's not numeric!")
    End If

End Sub
于 2013-03-15T01:31:16.320 に答える
0

この種の検証は、textBoxのLostFocuseventHandlerで、またはフォームレベルで、たとえばユーザーが[OK]ボタンをクリックしたときに行う方がはるかに簡単であることがわかりました。

次に、次のように検証を行うことができます

a)"0123456789./"テキストボックスに「もしそうなら非数値」以外の文字が含まれていますか

b)"/"文字が表示される場所(存在する場合)でテキストを分割してからIsNumeric()、各サブストリングで関数を使用します。それらのいずれかが数値でない場合、テキストは数値ではありません。

これは、1/2/2、つまり1/4を許可していることを前提としています。そうでない場合は、文字列に最大1"/"文字が含まれていることも確認する必要があります。

于 2013-03-15T02:28:24.223 に答える
0
Public Function onlyNumbers(ByVal KeyChar As Char) As Boolean
    Dim allowedChars As String

    allowedChars = "0123456789./" 

    If allowedChars.IndexOf(KeyChar) = -1 And (Asc(KeyChar)) <> 8 Then 
        Return True
    End If

    Return False
End Function

trueは、無効な文字を意味します。

キーを押すと、次のことを行う必要があります。

e.handled = onlyNumbers(e.keychar)
于 2013-03-15T01:47:05.697 に答える
0
Private Sub tbYear_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbYear.KeyPress
    If e.KeyChar < Chr(48) Or e.KeyChar > Chr(57) Then
        e.KeyChar = Nothing
    End If
End Sub
于 2015-01-27T19:25:42.547 に答える
0
' Validates textboxes for numeric only keystrokes.  Hook this up to the 
' PreviewTextInput of the desired textbox
Private Sub SetTextboxNumericOnly(sender As Object,
                                  e As TextCompositionEventArgs)

    Dim regex As New System.Text.RegularExpressions.Regex("[^0-9]+")
    e.Handled = regex.IsMatch(e.Text)

End Sub

テキストボックスの内容が削除された場合に備えて、テキストボックスに値が含まれているかどうかを確認する必要があることに注意してください。このルーチンにより、常に数値であることが保証されるため、チェックする必要がなくなります。

于 2015-05-16T00:26:56.427 に答える
0

少し正直に言うと、Visual Basicのテキストボックスに入力された数値をチェックする質問の一番上の回答によると、IsNumericよりも優れたソリューションと見なされるメソッド.TryParseもあります。

最初の理由は、TryParseを使用すると変換の結果も取得するのに対し、IsNumericを使用するとチェック後に変換を実行する必要があるためです。

2番目の理由は、IsNumericに任意のオブジェクト(たとえば、ボタン)を与えることができ、それを受け入れることです。コンパイル時にこの種のエラーを発見することは決してありません。代わりに、TryParseでは、最初のパラメーターとして文字列のみを渡すことができました。

于 2016-06-23T18:08:15.520 に答える