Подтвердить что ты не робот

VB.net нужно текстовое поле, чтобы принимать только номера

Я новичок в VB.net (самоучка) и мне просто интересно, может ли кто-нибудь там помочь мне с каким-нибудь кодом. Я не пытаюсь сделать что-то слишком сложное, просто у меня есть TextBox который принимает числовое значение от 1 до 10. Я не хочу, чтобы он принимал строку или любое число выше 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()
4b9b3361

Ответ 1

Вы можете сделать это с помощью целых чисел Ascii. Поместите этот код в событие Keybox 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

Ответ 2

Это то, что я сделал для обработки как ввода ключа, так и копирования/вставки.

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 = "."

в инструкции if в разделе KeyPress.

Ответ 3

Попробуйте следующее:

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

Ответ 4

Сначала вы должны проверить, является ли ввод целым числом. Вы можете сделать это с 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

Ответ 5

Вы можете избежать любого кода, используя элемент управления NumericUpDown, а не текстовое поле, это автоматически разрешает номера и имеет максимум и минимум. Он также позволяет получить доступ к номеру непосредственно с помощью NumericUpDown1.Value, а также использовать стрелки вверх и вниз для установки номера. Кроме того, если введено число выше/над max, он перейдет к ближайшему разрешенному номеру.

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

If Not Char.IsNumber(e.KeyChar) AndAlso Not e.KeyChar = "." AndAlso Not Char.IsControl(e.KeyChar) Then
            e.KeyChar = ""
End If

Это позволяет использовать клавишу удаления и устанавливать десятичные точки

Ответ 11

Я знаю, что этот пост старый, но я хотел поделиться тем, что я реализовал, чтобы превратить 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.

EDIT: Я нашел другой метод, который может работать, если вы используете свойства в своем коде. (Обратите внимание, что для 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".

Ответ 12

Это может быть слишком поздно, но для другой новой крови на 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

Ответ 13

Самое простое решение для проверки в TextBox в VB.NET

TextBox Validation for Visual Basic (VB.NET)

Сначала добавьте в проект новый файл кода VB.

  • Перейти к обозреватель решений
  • Щелкните правой кнопкой мыши в свой проект
  • Выберите Добавить > Новый элемент...
  • Добавить новый файл 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("[email protected]#$%^&*()_+=-", 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

Теперь используйте следующий код для события загрузки формы, как показано ниже.

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

Готово!..

Ответ 14

Прежде всего, установите 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

Ответ 15

Вы можете использовать следующий код. Текстовое поле. Событие нажатия клавиши:

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.

Ответ 16

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

Ответ 17

Вы можете использовать свойство onkeydown для TextBox, чтобы ограничить его значение только числами.

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

! (keyCode >= 65) проверка выполняется для исключающих алфавитов.

keyCode!= 32 check предназначен для исключения символа пробела между номерами.

Если вы хотите также исключить символы из ввода в текстовое поле, включите условие ниже также в свойство "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>

Объяснение:

KeyCode для 'a' - '65', а 'z' - '90'.

Ключевые коды от '90' до '222', которые являются другими символами, также не нужны.

KeyCode для "Space" Key - "32", который также не нужен.

Тогда комбинация клавиш "Shift" и "Number" (обозначающая символы) также не нужна. KeyCode для "0" - "48", а "9" - "57".

Следовательно, все они включены в само объявление TextBox, которое дает желаемый результат.

Попробуйте и посмотрите.

Ответ 18

Это сработало для меня... просто очистите текстовое поле полностью, нажав нечисловые клавиши.

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

Ответ 19

Скопируйте эту функцию в любой модуль внутри вашего проекта 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%:)

Ответ 20

Это было мое окончательное... Это касается и всех проблем типа:

Вот простое текстовое поле, для которого требуется число:

   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

Ответ 21

Используйте это в своем событии Keybox 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 not a number.
    If Control.ModifierKeys = Keys.Shift Then
        nonNumberEntered = True
    End If

End Function

Это позволит ввести числа, например 2/4, или цифры, такие как 3.5, в вашем текстовом поле, если используется decim "nonNumberEntered (e, Textbox1, True)".

Позволяет вводить только цифры в текстовое поле, используя "nonNumberEntered (e, Textbox1, False)" или "nonNumberEntered (e, Textbox1)".

Изменить: добавлен текст.

Ответ 22

В последнее время у меня было аналогичное использование для TextBox, которое могло принимать только числа.

В конце я использовал MaskedTextBox вместо TextBox. Вы определяете "маску" для текстового поля, и он будет принимать только символы, которые вы определили, - в данном случае, цифры. Недостатком является то, что он оставляет немного уродливой линии внутри TextBox;

Текстовая маска

То, что я любил в MaskedTextBox, было так настраиваемо. Если по какой-либо причине вы хотели бы, чтобы TextBox принимал только вход в формате 3 int, а затем 2 буквы, все, что вам нужно сделать, это установить TextMask в 000LL. В Visual Studio имеется загрузка предварительно определенных масок, и полную документацию можно найти здесь.

Предварительно определенные маски

Теперь я знаю, что это не полностью решает вашу проблему, но использование MaskedTextBox устраняет огромную часть сложности проблемы. Теперь вы можете гарантировать, что содержимое MaskedTextBox будет только когда-либо Int, что позволит вам запустить простой оператор If, чтобы обеспечить значение =<10

Ответ 23

Я знаю, что этот пост старый, но я хочу поделиться своим кодом.

 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

Ответ 24

В каждой записи в текстовом поле (event - Handles RestrictedTextBox.TextChanged) вы можете попробовать кастовать введенный текст в целое число, если происходит сбой, вы просто reset значение текста в RestrictedTextBox для последнего действительного ввода ( который постоянно обновляется под переменной temp1).

Вот как это сделать. В sub, который загружается с формой (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 etc....

Ответ 25

каждое текстовое поле имеет проверяющее и проверенное событие, которое вы можете использовать, следующим образом: -

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

Ответ 26

Imports System.Drawing
Imports System.Text.RegularExpressions
Imports System.Windows.Forms

Module Module1
    Public Enum ValidationType
        MaxMin = 1
    End Enum
    Public Sub AssignValidation(ByRef CTRL As TextBox, ByVal Validation_Type As ValidationType, Min As Double, Max As Double)
        Dim txt As TextBox = CTRL

        Select Case Validation_Type
            Case ValidationType.MaxMin
                AddHandler txt.TextChanged, AddressOf MaximumMinimum
        End Select

    End Sub

    Public Sub MaximumMinimum(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim NO As TextBox = sender
        If Val(NO.Text) < Min Then
            NO.Focus()
        ElseIf Val(NO.Text) > Max Then
            NO.Focus()
        End If
    End Sub

End Module

У меня есть вопрос об этом коде. Если у меня есть несколько текстовых полей и все текстовые поля будут иметь разные максимальные и минимальные значения, которые не являются константами, то как я могу добавить эти переменные в этот код?