2013-10-02 6 views
0

В настоящее время у меня есть 3 текстовых поля. Каждое текстовое поле должно содержать номер. Если какое-либо из трех текстовых полей не содержит числового значения, покажите сообщение об ошибке. Для текстовых полей, не отображающих число (где IsNumeric возвращает false), я хочу изменить его значение по умолчанию. Как мне это сделать?Изменение недопустимого значения текстового поля - VB NET

If Not (IsNumeric(txtpadult.Text)) Or Not (IsNumeric(txtpjunior.Text)) Or Not (IsNumeric(txtpconc.Text)) Then 
    MsgBox("ERROR: INVALID NUMERIC !", vbCritical, "System Message") 
End if 

Заранее спасибо.

+0

Привет, Chozo ... Я читал ваш вопрос несколько раз, и я все еще не совсем уверен, что вам нужно ... вы могли бы прояснить? –

+0

Если txtpadult или txtpjunior или txtpconc являются ложными, сделайте ложную инструкцию для свойств текста со значением свойства. –

+0

Chozo, я позволил изменить ваш вопрос, чтобы сделать вашу задачу немного яснее. –

ответ

4

Во-первых, я бы рекомендовал использовать новые методы .NET, если это возможно, вместо того, чтобы прибегать к старым методам стиля VB6. Таким образом, вместо MsgBox, я бы рекомендовал использовать MessageBox.Show, и вместо IsNumeric, я хотел бы использовать Integer.TryParse и т.д.

Так, например, вы могли бы переработать код так:

Dim invalid As TextBox = Nothing 
If Not Integer.TryParse(txtpadult.Text, 0) Then 
    invalid = txtpadult 
ElseIf Not Integer.TryParse(txtpjunior.Text, 0) Then 
    invalid = txtpjunior 
ElseIf Not Integer.TryParse(txtpconc.Text, 0) Then 
    invalid = txtpconc 
End If 
If invalid IsNot Nothing Then 
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    invalid.Text = "0" ' Set to default value 
End If 

Как вам может видеть, так как он проверяет каждое текстовое поле, если он находит недопустимый, он сохраняет ссылку на него в переменной invalid. Затем он может проверить, удалось ли найти и установить его значение. Кроме того, вы можете создать список текстовых полей, которые должны быть проверены, а затем цикл через них, как это:

Dim textBoxes() As TextBox = {txtpadult, txtpadult, txtpconc} 
Dim invalid As TextBox = Nothing 
For Each i As TextBox In textBoxes 
    If Not Integer.TryParse(i.Text, 0) Then 
     invalid = i 
     Exit For 
    End If 
Next 
If invalid IsNot Nothing Then 
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    invalid.Text = "0" ' Set to default value 
End If 

Или, если вы хотите быть умным, вы можете сделать это в менее строк кода с метод расширения LINQ:

Dim textBoxes() As TextBox = {txtpadult, txtpadult, txtpconc} 
Dim invalid As TextBox = textBoxes.FirstOrDefault(Function(x) Not Integer.TryParse(x.Text, 0)) 
If invalid IsNot Nothing Then 
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    invalid.Text = "0" ' Set to default value 
End If 
Смежные вопросы