Я просто должен был напишите функцию, которая ограничивает ввод текстового поля действительными десятичными значениями, и я придумал следующее:
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(), но выбор действительно зависит от вас.
Этот код должен работать. Можете ли вы разместить точное сообщение об ошибке? – David