Ограничение VB NET числовое в текстовом поле

Я создал текстовое поле в своей программе. Мне нужно попросить пользователя ввести значение в текстовое поле без использования числового управления. Когда они превышают граничное числовое значение, которое я установил, немедленно появляется сообщение об ошибке. Как я могу это сделать ? Другие методы также будут оценены! Спасибо вам.


person Chozo Qhai    schedule 27.09.2013    source источник


Ответы (3)


Используйте Int32.TryParse, а затем проверьте, находится ли значение в границах.

Dim minimum = 10
Dim maximum = 100
Dim number As Int32
If Not Int32.TryParse(txtNumber.Text, number) Then
    MessageBox.Show("Please enter a valid integer!")
    Return
End If
If number < minimum OrElse number > maximum Then
    Dim message = String.Format("Please enter an integer between {0} and {1}!",
                  minimum, maximum)
    MessageBox.Show(message)
    Return
End If

' all is ok, go on ...
person Tim Schmelter    schedule 27.09.2013
comment
Как я могу применить это в событии нажатия клавиши? Большое спасибо! - person Cary Bondoc; 03.07.2015

Ответ, данный @Tim Schmelter, правильный, чтобы получить числа в TextBox, вы должны

проверьте класс DecimalUpdown в Расширить набор инструментов WPF

:)

person Alexandre    schedule 27.09.2013

Вот код, который я использовал в течение многих лет для текстовых полей DotNet. Возможно, вам придется изменить для вашей конкретной реализации, но, скорее всего, нет.

Поместите этот код в модуль, чтобы вы могли вызывать его из нескольких мест:

Public Sub NumericTextboxKeyPress(ByVal txt As TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs, Optional ByVal AllowNegative As Boolean = True, Optional ByVal AllowDecimal As Boolean = True)
        Dim dot As Boolean = False
        Dim flag As Boolean = False
        If e.KeyChar = ControlChars.Back Then
            Return
        End If
        If e.KeyChar = "."c AndAlso Not AllowDecimal Then
            flag = True
        End If
        If e.KeyChar = "-"c AndAlso Not AllowNegative Then
            flag = True
        End If
        If e.KeyChar = "."c And txt.Text.IndexOf("."c) > 0 Then
            dot = True
        End If
        If e.KeyChar < "-"c Or e.KeyChar > "9"c Or dot = True Then
            flag = True
        End If
        If txt.Text.Length > 0 AndAlso e.KeyChar = "-"c AndAlso (txt.SelectionStart > 0 OrElse txt.Text.IndexOf("-"c) >= 0) Then
            flag = True
        End If
        If e.KeyChar = "/"c Then
            flag = True
        End If
        If flag = True Then
            e.Handled = True
        End If
    End Sub

    Public Function ValidNumericTextboxValue(ByVal txt As TextBox, ByVal Precision As Integer, ByVal Scale As Integer, ByVal Style As String, Optional ByVal ThrowError As Boolean = True) As Boolean
        If txt.Text Is Nothing OrElse txt.Text.Trim = "" Then
            txt.Text = Format(0, Style)
            Return True
        Else
            Dim Value As Object
            Dim dMax As Decimal
            Dim dMin As Decimal
            dMax = New String("9", Precision - Scale) & "." & New String("9", Scale)
            dMin = "-" & New String("9", Precision - Scale) & "." & New String("9", Scale)
            If IsNumeric(txt.Text) Then
                'Make sure there are not more digits after the decimal than allowed
                Value = Math.Round(CDec(txt.Text), Scale)
                If Value > dMax Then
                    If ThrowError Then
                        Throw New Exception("Numeric Value is geater than allowed!  Max value is: " & FormatNumber(dMax, Scale, TriState.False, TriState.UseDefault, TriState.True))
                    Else
                        MessageBox.Show("Numeric Value is geater than allowed!  Max value is: " & FormatNumber(dMax, Scale, TriState.False, TriState.UseDefault, TriState.True))
                    End If
                    Return False
                ElseIf Value < dMin Then
                    If ThrowError Then
                        Throw New Exception("Numeric Value is less than allowed!  Min value is: " & FormatNumber(dMin, Scale, TriState.False, TriState.UseDefault, TriState.True))
                    Else
                        MessageBox.Show("Numeric Value is less than allowed!  Min value is: " & FormatNumber(dMin, Scale, TriState.False, TriState.UseDefault, TriState.True))
                    End If
                    Return False
                End If
                'If I am here, lets format it and put it back in the textbox
                txt.Text = Format(Value, Style)
                Return True
            Else
                If ThrowError Then
                    Throw New Exception("This must be a numeric value!  Max value is: " & FormatNumber(dMax, Scale, TriState.False, TriState.UseDefault, TriState.True))
                Else
                    MessageBox.Show("This must be a numeric value!  Max value is: " & FormatNumber(dMax, Scale, TriState.False, TriState.UseDefault, TriState.True))
                End If
                Return False
            End If
        End If
    End Function

Вызовите метод NumericTextboxKeyPress из события нажатия клавиши в текстовом поле, это предотвратит ввод специальных символов (нечисловых).

Вызовите ValidNumericTextboxValue из события проверки текстового поля. Это отформатирует текст и проверит точность и масштаб.

Наслаждаться

person Steve    schedule 27.09.2013