web-dev-qa-db-ja.com

VB.netには数字のみを受け入れるためのテキストボックスが必要

私はVB.net(自己学習)にかなり慣れていないので、誰かがコードを手伝ってくれるかどうか疑問に思っていました。あまり複雑なことをしようとはしていません。1から10までの数値を受け入れるTextBoxを持っているだけです。文字列または10を超える数値を受け入れないようにします。または、エラーメッセージが表示され、有効な番号を入力するように指示されます。これは私が持っているものです。私が問題を抱えているので、明らかにそれは素晴らしいことではありません。助けてくれる人に感謝します。

 If TxtBox.Text > 10 Then
        MessageBox.Show("Please Enter a Number from 1 to 10")
        TxtBox.Focus()
    ElseIf TxtBox.Text < 10 Then
        MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
        Total = Total + 1
    ElseIf IsNumeric(TxtBox.Text) Then
        MessageBox.Show("Thank you, your rating was " & ValueTxtBox.Text)
    End If

    ValueTxtBox.Clear()
    ValueTxtBox.Focus()
25
Rico Jackson

Ascii整数を使用してこれを行うことができます。このコードをTextboxのKeypressイベントに配置します。 e.KeyCharは、押されたキーを表します。そして、組み込み関数Asc()は、それをそのASCII整数に変換します。

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

    '97 - 122 = Ascii codes for simple letters
    '65 - 90  = Ascii codes for capital letters
    '48 - 57  = Ascii codes for numbers

    If Asc(e.KeyChar) <> 8 Then
        If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
            e.Handled = True
        End If
    End If

End Sub
30
Isuru

これは、キー入力とコピー/貼り付けの両方を処理するために私がしたことです。

Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress
    If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then
        e.Handled = True
    End If
End Sub

Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox.TextChanged
    Dim digitsOnly As Regex = New Regex("[^\d]")
    TextBox.Text = digitsOnly.Replace(TextBox.Text, "")
End Sub

小数を許可する場合は、追加します

AndAlso Not e.KeyChar = "."

keyPressセクションのifステートメントに。

11
BCarpe

これを試して:

Private Sub txtCaseID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCaseID.KeyPress
    If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then e.KeyChar = ""
End Sub
6
Avadhani

入力が実際に整数であるかどうかを最初に検証する必要があります。 Integer.TryParseでできます:

Dim intValue As Integer
If Integer.TryParse(TxtBox.Text, intValue) AndAlso intValue > 0 AndAlso intValue < 11 Then
    MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
Else
    MessageBox.Show("Please Enter a Number from 1 to 10")
End If
4
Meta-Knight

テキストボックスではなくNumericUpDownコントロールを使用すると、コードを回避できます。これにより、自動的に数字のみが許可され、最大値と最小値が設定されます。また、NumericUpDown1.Valueを使用して番号に直接アクセスできるほか、上矢印と下矢印を使用して番号を設定できます。また、最大値以上/最大値が入力された場合、最も近い許容数にジャンプします。

3
bendataclear
Private Sub MyTextBox_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyTextBox.KeyPress
    If Not IsNumeric(e.KeyChar) And Not e.KeyChar = ChrW(Keys.Back) Then
        e.Handled = True
    End If
End Sub
3
Roy
Private Sub Data_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Data.KeyPress
    If (Not e.KeyChar = ChrW(Keys.Back) And ("0123456789.").IndexOf(e.KeyChar) = -1) Or (e.KeyChar = "." And Data.Text.ToCharArray().Count(Function(c) c = ".") > 0) Then
        e.Handled = True
    End If
End Sub
2
moustafaghaddar
Private Sub textBox5_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles textBox5.KeyPress
        If Asc(e.KeyChar) <> 8 Then
            If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
                e.Handled = True
            End If
        End If
    End Sub
2
Er Harry Singh

これは遅すぎるかもしれませんが、VBのその他の新しい血については、ここに簡単なものがあります。

まず、いずれの場合でも、アプリケーションが必要としない限り、ユーザーのキー入力をブロックすることは何とかして良いことではありません、ユーザーはアクションをハードウェアキーボードの問題と誤解し、同時にキー入力エラーがどこに来たのかがわかりませんから。

以下に簡単なものを示します。ユーザーが自由にエントリを入力して、後でエラーをトラップします。

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim theNumber As Integer
        Dim theEntry As String = Trim(TextBox1.Text)

        'This check if entry can be converted to
        'numeric value from 0-10, if cannot return a negative value.
        Try
            theNumber = Convert.ToInt32(theEntry)
            If theNumber < 0 Or theNumber > 10 Then theNumber = -1
        Catch ex As Exception
            theNumber = -1
        End Try

        'Trap for the valid and invalid numeric number
        If theNumber < 0 Or theNumber > 10 Then
            MsgBox("Invalid Entry, allows (0-10) only.")
            'entry was invalid return cursor to entry box.
            TextBox1.Focus()
        Else
            'Entry accepted:
            ' Continue process your thing here...

        End If
    End Sub
1
TheBigBear

この投稿は古いことは知っていますが、TextBoxをIntBoxと呼ぶものに変えるために実装したものを共有したかったのです。

まず、以下を使用して拡張機能を作成する必要があります。

<Runtime.CompilerServices.Extension()> _
Public Function HandledStringtoInteger(s As String) As Integer
    Try
        If s = String.Empty Then
            Return 0
        Else
            Return Integer.Parse(s)
        End If
    Catch
        Dim result As String = String.Empty
        Dim ReturnInt As Integer
        Dim Parsed As Integer
        For Each Character In s.ToCharArray
            If Character = "-" Then
                If s.Substring(0, 1).ToString <> "-" Then
                    result = Character + result
                End If
            End If
            If Character = "." Then
                Exit For
            End If
            If Integer.TryParse(Character, Parsed) Then
                result = result + Parsed.ToString
            End If
        Next
        If result <> String.Empty Then
            If Integer.TryParse(result, ReturnInt) Then
                Return Integer.Parse(ReturnInt)
            Else
                If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
                    Return Integer.MaxValue
                ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
                    Return Integer.MinValue
                Else
                    Return Integer.Parse(ReturnInt)
                End If
            End If
        Else
            Return 0
        End If
    End Try
End Function

次に、TextChangedイベントのサブを作成します。

Private Sub TextBox_to_IntBox(sender As Object, e As TextChangedEventArgs) Handles YourTextBox.TextChanged
    If DirectCast(sender, TextBox).IsKeyboardFocused Then
        DirectCast(sender, TextBox).Text = DirectCast(sender, TextBox).Text.HandledStringtoInteger
        DirectCast(sender, TextBox).CaretIndex = DirectCast(sender, TextBox).Text.Length
    End If
End Sub

次に、ユーザーがテキストを入力するたびに、文字列を評価し、標準の整数の範囲内にある数値のみを返します。 「-」文字を使用すると、整数を正から負に変更し、元に戻すことができます。

誰かがこのコードを改善できる何かを見たら私に知らせてください、しかし私のテストはこれがIntBoxを作るために素晴らしい働きをすることを示します。

編集:コードでプロパティを使用すると機能する別の方法を見つけました。 (これにはTextBoxごとに個別のプロパティが必要です)

最初にプロパティを作成します。

Public Class Properties
    Implement INotifyPropertyChanged

    Private _Variable as Integer
    Public Property YourProperty as Object
    get
      Return _Variable
    end get
    set(value as Object)
      _Variable = value.ToString.ToInteger 'I will give the ToInteger extension code later
    end set
    end property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

Public Sub OnPropertyChange(ByVal e As PropertyChangedEventArgs)
    If Not PropertyChangedEvent Is Nothing Then
        RaiseEvent PropertyChanged(Me, e)
    End If
End Sub
End Class

次に、ウィンドウのメインクラスでバインディングを作成します。

Public WithEvents _YourVariable as New Properties

Public Sub New()
    InitializeComponent()
With YourTextBox
  .SetBinding(Textbox.TextProperty, New Binding("YourProperty"))
  .DataContext = _YourVariable
End With
End Sub

最後に、私が設定したToInteger拡張コードを示します。

''' <summary>
''' Handles conversion of variable to Integer.
''' </summary>
''' <param name="X"></param>
''' <param name="I">Returned if conversion fails.</param>
''' <returns>Signed 32bit Integer</returns>
''' <remarks></remarks>
<Runtime.CompilerServices.Extension()> _
Public Function toInteger(Of T)(ByRef X As T, Optional I As Integer = 0) As Integer
    Dim S As String = X.ToString
    Try
        If S = String.Empty Then
            Return I
        Else
            Return Integer.Parse(S)
        End If
    Catch
        Dim result As String = String.Empty
        Dim ReturnInt As Integer
        Dim Parsed As Byte
        For Each Character In S.ToCharArray
            If Character = "-" Then
                If S.Substring(0, 1).ToString <> "-" Then
                    result = Character + result
                End If
            End If
            If Character = "." Then
                Exit For
            End If
            If Byte.TryParse(Character, Parsed) Then
                result = result + Parsed.ToString
            End If
        Next
        If result <> String.Empty Then
            If Integer.TryParse(result, ReturnInt) Then
                Return Integer.Parse(ReturnInt)
            Else
                If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
                    Return Integer.MaxValue
                ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
                    Return Integer.MinValue
                Else
                    Return Integer.Parse(ReturnInt)
                End If
            End If
        Else
            Return I
        End If
    End Try
End Function

これらのすべてを組み合わせてボックスに何かを入力すると、テキストボックスであるかのように動作しますが、フォーカスを変更すると、ToInteger拡張機能は値を整数としてプロパティに設定し、テキストボックスに返します。

つまり、フォーカスが変更された後にオペレーターが「-1w3」を入力すると、自動的に「-13」として返されます。

1
ARidder101

VB.NETのTextBox Validationの最もシンプルなソリューション

TextBox Validation for Visual Basic (VB.NET)

まず、プロジェクトに新しいVBコードファイルを追加します。

  1. 移動ソリューションエクスプローラー
  2. 右クリックプロジェクトに
  3. 追加> 新しいアイテム...を選択します
  4. 新しいVBコードファイル(つまり、example.vb)を追加します

またはを押す Ctrl+Shift+A

このファイルに次のコードをコピーして貼り付け、適切な名前を付けます。 (つまり、KeyValidation.vb)

Imports System.Text.RegularExpressions
Module Module1
    Public Enum ValidationType
        Only_Numbers = 1
        Only_Characters = 2
        Not_Null = 3
        Only_Email = 4
        Phone_Number = 5
    End Enum
    Public Sub AssignValidation(ByRef CTRL As Windows.Forms.TextBox, ByVal Validation_Type As ValidationType)
        Dim txt As Windows.Forms.TextBox = CTRL
        Select Case Validation_Type
            Case ValidationType.Only_Numbers
                AddHandler txt.KeyPress, AddressOf number_Leave
            Case ValidationType.Only_Characters
                AddHandler txt.KeyPress, AddressOf OCHAR_Leave
            Case ValidationType.Not_Null
                AddHandler txt.Leave, AddressOf NotNull_Leave
            Case ValidationType.Only_Email
                AddHandler txt.Leave, AddressOf Email_Leave
            Case ValidationType.Phone_Number
                AddHandler txt.KeyPress, AddressOf Phonenumber_Leave
        End Select
    End Sub
    Public Sub number_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Dim numbers As Windows.Forms.TextBox = sender
        If InStr("1234567890.", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub Phonenumber_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Dim numbers As Windows.Forms.TextBox = sender
        If InStr("1234567890.()-+ ", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub OCHAR_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If InStr("1234567890!@#$%^&*()_+=-", e.KeyChar) > 0 Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub NotNull_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim No As Windows.Forms.TextBox = sender
        If No.Text.Trim = "" Then
            MsgBox("This field Must be filled!")
            No.Focus()
        End If
    End Sub
    Public Sub Email_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim Email As Windows.Forms.TextBox = sender
        If Email.Text <> "" Then
            Dim rex As Match = Regex.Match(Trim(Email.Text), "^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,3})$", RegexOptions.IgnoreCase)
            If rex.Success = False Then
                MessageBox.Show("Please Enter a valid Email Address", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Email.BackColor = Color.Red
                Email.Focus()
                Exit Sub
            Else
                Email.BackColor = Color.White
            End If
        End If
    End Sub
End Module

次のコードを使用して、次のようなLoad Eventを形成します。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AssignValidation(Me.TextBox1, ValidationType.Only_Digits)
        AssignValidation(Me.TextBox2, ValidationType.Only_Characters)
        AssignValidation(Me.TextBox3, ValidationType.No_Blank)
        AssignValidation(Me.TextBox4, ValidationType.Only_Email)
End Sub

完了しました。

1
Dim ch(10) As Char
Dim len As Integer
len = TextBox1.Text.Length
ch = TextBox1.Text.ToCharArray()
For i = 0 To len - 1
    If Not IsNumeric(ch(i)) Then
        MsgBox("Value you insert is not numeric")
    End If
Next
1
Sameershona
If Not Char.IsNumber(e.KeyChar) AndAlso Not e.KeyChar = "." AndAlso Not Char.IsControl(e.KeyChar) Then
            e.KeyChar = ""
End If

これにより、削除キーを使用して小数点を設定できます

1
Mr_LinDowsMac

すべてのテキストボックスにはvalidatingおよびvalidatedイベントがあり、次のように使用できます:-

Private Sub PriceTxt_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles PriceTxt.Validating
                If Not IsNumeric(PriceTxt.Text) Then
                 PriceTxt.BackColor = Color.Red
                 MsgBox("The Price Should Be Numeric Only , Enter Again", vbCritical)
                 PriceTxt.Text = ""
                 PriceTxt.BackColor = Color.White
                End If
End Sub
0
Jay
Public Function Isnumber(ByVal KCode As String) As Boolean
    If Not Isnumeric(KCode) And KCode <> ChrW(Keys.Back) And KCode <> ChrW(Keys.Enter) And KCode <> "."c Then

        MsgBox("Please Enter Numbers only", MsgBoxStyle.OkOnly)
    End If
End Function

Private Sub txtBalance_KeyPress(ByVal sender As System.Object, ByVal e As 
System.Windows.Forms.KeyPressEventArgs) Handles txtBalance.KeyPress

    If Not Isnumber(e.KeyChar) Then
        e.KeyChar = ""
    End If

End Sub
0
test

フォローコードテキストボックスキープレスイベントを使用できます:

Private Sub txtbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtbox1.KeyPress
Try
If val(txtbox1.text) < 10 then
If Char.IsLetterOrDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
e.Handled = True
End If
Else
e.Handled = True
End If
Catch ex As Exception
ShowException(ex.Message, MESSAGEBOX_TITLE, ex)
End Try
End Sub

このコードは数字のみを許可し、1〜10の数字のみを入力できます。

0
Dinesh

これをTextbox Keydownイベントで使用します。

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    'you can enter decimal "if nonNumberEntered(e, TextBox1, True) then" 
    'otherwise just numbers "if nonNumberEntered(e, TextBox1) then"
    If nonNumberEntered(e, TextBox1, True) Then
        e.SuppressKeyPress = True
    End If
    If e.KeyCode = Keys.Enter Then
        'put your code here
    End If

End Sub

Vb.netプロジェクト内の任意のモジュールにこの関数をコピーします。

Public Function nonNumberEntered(ByVal e As System.Windows.Forms.KeyEventArgs, _
                          ByVal ob As TextBox, _
                          Optional ByVal decim As Boolean = False) As Boolean
    nonNumberEntered = False

    If decim Then
        ' Determine whether the keystroke is a number from the top of the keyboard.
        If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
            ' Determine whether the keystroke is a number from the keypad.
            If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
                If e.KeyCode <> Keys.Decimal And e.KeyCode <> Keys.OemPeriod Then
                    If e.KeyCode <> Keys.Divide And e.KeyCode <> Keys.OemQuestion Then
                        ' Determine whether the keystroke is a backspace.
                        If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
                        And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
                            ' A non-numerical keystroke was pressed. 
                            nonNumberEntered = True
                        End If
                    ElseIf ob.Text.Contains("/") Or ob.Text.Length = 0 Then
                        nonNumberEntered = True
                    End If
                ElseIf ob.Text.Contains(".") Or ob.Text.Length = 0 Then
                    nonNumberEntered = True
                End If
            End If
        End If
    Else
        ' Determine whether the keystroke is a number from the top of the keyboard.
        If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
            ' Determine whether the keystroke is a number from the keypad.
            If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
                ' Determine whether the keystroke is a backspace.
                If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
                    And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
                    ' A non-numerical keystroke was pressed. 
                    nonNumberEntered = True
                End If
            End If
        End If
    End If

    'If shift key was pressed, it's not a number.
    If Control.ModifierKeys = Keys.Shift Then
        nonNumberEntered = True
    End If

End Function

これにより、decim "nonNumberEntered(e、Textbox1、True)"を使用している場合、テキストボックスに2/4などの数字または3.5などの数字を入力できます。

「nonNumberEntered(e、Textbox1、False)」または「nonNumberEntered(e、Textbox1)」を使用する場合、テキストボックスに数字のみを入力できます。

編集:テキストを追加しました。

0
ionbucata

この投稿が古いことは知っていますが、コードを共有したいと思います。

 Private Sub txtbox1_TextChanged(sender As Object, e As EventArgs) Handles txtbox1.TextChanged
    If txtbox1.Text.Length > 0 Then
        If Not IsNumeric(txtbox1.Text) Then
            Dim sel As Integer = txtbox1.SelectionStart
            txtbox1.Text = txtbox1.Text.Remove(sel - 1, 1)
            txtbox1.SelectionStart = sel - 1
        End If
    End If
End Sub
0
j-j

まず、TextBoxのMaxLengthを2に設定して、TextBoxのテキストエントリの量を制限します。次に、 KeyPress Event を使用して、このようなことを試すことができます。最大2桁(10)を使用しているため、チェックを開始するにはKeyなどのEnterを使用する必要があります。

Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Dim tb As TextBox = CType(sender, TextBox)
    If Not IsNumeric(e.KeyChar) Then    'Check if Numeric
        If Char.IsControl(e.KeyChar) Then  'If not Numeric Check if a Control
            If e.KeyChar = ChrW(Keys.Enter) Then
                If Val(tb.Text) > 10 Then  'Check Bounds
                    tb.Text = ""
                    ShowPassFail(False)
                Else
                    ShowPassFail(True)
                End If
                e.Handled = True
            End If
            Exit Sub
        End If
        e.Handled = True
        ShowPassFail(False)
    End If
End Sub

Private Sub ShowPassFail(pass As Boolean)
    If pass Then
        MessageBox.Show("Thank you, your rating was " & TextBox1.Text)
    Else
        MessageBox.Show("Please Enter a Number from 1 to 10")
    End If
    TextBox1.Clear()
    TextBox1.Focus()
End Sub
0
Mark Hall

Vb.netプロジェクト内の任意のモジュールにこの関数をコピーします。

Public Function MakeTextBoxNumeric(kcode As Integer, shift As Boolean) As Boolean
    If kcode >= 96 And kcode <= 105 Then

    ElseIf kcode >= 48 And kcode <= 57
        If shift = True Then Return False
    ElseIf kcode = 8 Or kcode = 107 Then

    ElseIf kcode = 187 Then
        If shift = False Then Return False
    Else
        Return False
    End If
    Return True
End Function

次に、この関数をtextbox_keydownイベント内で次のように使用します。

Private Sub txtboxNumeric_KeyDown(sender As Object, e As KeyEventArgs) Handles txtboxNumeric.KeyDown
If MakeTextBoxNumeric(e.KeyCode, e.Shift) = False Then e.SuppressKeyPress = True
End Sub

はい。それは100%動作します:)

0

TextBoxのonkeydownプロパティを使用して、値を数値のみに制限できます。

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32);"></asp:TextBox>

!(keyCode> = 65)アルファベットを除くチェックです。

keyCode!= 32チェックは、数字の間のスペース文字を除外するためのものです。

シンボルもテキストボックスへの入力から除外する場合は、「onkeydown」プロパティにも以下の条件を含めます。

!(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57))

したがって、TextBoxは最終的に

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32 && !(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57)));"></asp:TextBox>

説明:

「a」のKeyCodeは「65」で、「z」は「90」です。

他のシンボルである「90」から「222」までのキーコードも必要ありません。

「スペース」キーのキーコードは「32」で、これも必要ありません。

次に、「Shift」キーと「Number」キー(シンボルを表す)の組み合わせも必要ありません。 「0」のキーコードは「48」、「9」は「57」です。

したがって、これらはすべて、希望する結果を生成するTextBox宣言自体に含まれています。

試してみてください。

0
EIV

最近、数字しか受け取れないTextBoxに対して、同様の使用要件がありました。

最終的に、MaskedTextBoxの代わりにTextBoxを使用しました。テキストボックスに「マスク」を定義すると、定義した文字(この場合は数字)のみが受け入れられます。欠点は、TextBox内に少しbitい行を残すことです。

A text mask

MaskedTextBoxについて私が気に入ったのは、それがとてもカスタマイズ可能であったことです。何らかの理由でTextBoxに3つの整数とそれに続く2文字の形式の入力のみを受け入れたい場合、必要なことはTextMask000LLに設定することだけです。 Visual Studioには多数の定義済みマスクがあり、完全なドキュメントは here にあります。

Pre-defined masks

さて、これで問題を完全に解決できるわけではないことはわかっていますが、MaskedTextBoxを使用すると、問題の複雑さの大部分が取り除かれます。これで、MaskedTextBoxの内容がIntのみになることを保証でき、単純なIfステートメントを実行して、値が=<10であることを確認できます。

0
Jonny Wright

テキストボックスの各エントリ(イベント-RestrictedTextBox.TextChangedを処理)で、入力されたテキストを整数にキャストしようとすることができます。エラーが発生した場合、RestrictedTextBoxのテキストの値を最後の有効なエントリにリセットします(常に更新されます) temp1変数)。

これを実行する方法を次に示します。フォーム(me.loadまたはmybase.load)でロードするサブルーチンで、temp1をRestrictedTextBox.Textのデフォルト値に初期化します

Dim temp1 As Integer 'initialize temp1 default value, you should do this after the default value for RestrictedTextBox.Text was loaded.
If (RestrictedTextBox.Text = Nothing) Then 
    temp1 = Nothing
Else
    Try 
        temp1 = CInt(RestrictedTextBox.Text)
    Catch ex As Exception
        temp1 = Nothing
    End Try
End If   

フォームの他のポイントで:

Private Sub textBox_TextChanged(sender As System.Object, e As System.EventArgs) Handles RestrictedTextBox.TextChanged
    Try
        temp1 = CInt(RestrictedTextBox.Text) 'If user inputs integer, this will succeed and temp will be updated
    Catch ex As Exception
        RestrictedTextBox.Text = temp1.ToString 'If user inputs non integer, textbox will be reverted to state the state it was in before the string entry
    End Try
End Sub

これの良いところは、これを使用してテキストボックスを任意のタイプに制限できることです:double、uintなど...

0
thebunnyrules

これは私にとってはうまくいきました...数字以外のキーが押されたときにテキストボックスを完全にクリアしてください。

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    If IsNumeric(TextBox2.Text) Then
        'nada
    Else
        TextBox2.Clear()
    End If
End Sub
0
Brian

これが私の最後でした...タイプの問題もすべて回避します。

数字が必要な簡単なテキストボックスを次に示します。

   public Sub textbox_memorytotal_TextChanged(sender As Object, e As EventArgs) Handles textbox_memorytotal.TextChanged
        TextboxOnlyNumbers(sender)
    End Sub

そして、すべての不正な入力を修正する手順は次のとおりです。

Public Sub TextboxOnlyNumbers(ByRef objTxtBox As TextBox)

    ' ONLY allow numbers
    If Not IsNumeric(objTxtBox.Text) Then

        ' Don't process things like too many backspaces
        If objTxtBox.Text.Length > 0 Then

            MsgBox("Numerical Values only!")

            Try
                ' If something bad was entered delete the last character
                objTxtBox.Text = objTxtBox.Text.Substring(0, objTxtBox.Text.Length - 1)

                ' Put the cursor and the END of the corrected number
                objTxtBox.Select(objTxtBox.Text.Length + 1, 1)

            Catch ex As Exception
            End Try
        End If
    End If
End Sub
0
Ryan Ramsey