2010-11-02 4 views
1

Я пытаюсь проверить, является ли число десятичным числом в Visual Basic. Результаты, которые я получаю, когда число допустимо, показывает msgBox. Когда это неверно, я не получаю msgBox, и программа вылетает с сообщением об ошибке, что число должно быть меньше бесконечности.Проверка десятичного кода в текстовом поле

Я попробовал добавить другое If Not IsNumeric (txt1.text), затем - но получил те же результаты.

Где я ошибся?

If IsNumeric(txt1.text) Then 
    msgBox("good") 
Else 
    msgBox("not good") 
End If 
+0

Этот код должен работать. Можете ли вы разместить точное сообщение об ошибке? – David

ответ

3

Попробуйте использовать Double.TryParse или Decimal.TryParse вместо IsNumeric.

Dim result as Double = 0.0 
if Double.TryParse(txt1.text, result) then 
    ' valid entry 
else 
    ' invalid entry 
end if 
+0

Спасибо, это была самая простая версия для понимания. – jpavlov

0

Вы можете игнорировать символы в случае нажатия клавиши в текстовом поле, подобно:

Private Sub txtValue_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress 
     If Not Char.IsDigit(e.KeyChar) Then 
      If Not (e.KeyChar = vbBack) Then 
       e.Handled = True 
      End If 
     End If 
End Sub 

не уверены, какой версии VB вы используете, предполагая, что это .NET

1

Я просто должен был напишите функцию, которая ограничивает ввод текстового поля действительными десятичными значениями, и я придумал следующее:

Private Sub validateDecimalTextBox(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) handles myTextBox.keyPress 
     Dim textBox As TextBox = DirectCast(sender, TextBox) 
     If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or (e.KeyChar = "." And textBox.Text.IndexOf(".") < 0) Or (e.KeyChar = "-" And textBox.Text.Length = 0)) Then 
      e.Handled = True 
     End If 
    End Sub 

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

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

Это решение не является полным, поскольку оно позволяет пользователю вводить только «-» в текстовое поле, которое (предположительно) не будет действительным для вас. Поэтому вы можете использовать решения, о которых говорили другие, и использовать любое из следующих способов разумным образом.

double.parse, 
double.tryparse 
isNumeric() 

Мое личное предпочтение было бы для isNumeric(), но выбор действительно зависит от вас.

0

Вы также можете использовать событие Keybox Keypress. i.e

Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Textbox1.KeyPress 
    If (e.KeyChar < "0" Or e.KeyChar > "9") And e.KeyChar <> "." And e.KeyChar <> ControlChars.Back Then 
     e.Handled = True 
    Else 
     If e.KeyChar = "." Then 
      If Textbox1.Text.Contains(".") Then 
       Beep() 
       e.Handled = True 
      End If 
     End If 
    End If 

End Sub 

Надеюсь, это поможет.

Смежные вопросы