it-swarm.com.ru

Проверьте наличие пустых элементов управления TextBox в VB.NET

Я получил форму заявки в VB.NET.

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

If txt1.text = "" Or txt2.text="" Then
    msgbox("Please fill in all boxes")

Это кажется длинным путем?

8
Dr.Pepper

Вы также можете использовать LINQ:

Dim empty =
    Me.Controls.OfType(Of TextBox)().Where(Function(txt) txt.Text.Length = 0)
If empty.Any Then
    MessageBox.Show(String.Format("Please fill following textboxes: {0}",
                    String.Join(",", empty.Select(Function(txt) txt.Name))))
End If

Интересный метод - Enumerable.OfType

То же самое в синтаксисе запроса (более читабельно в VB.NET):

Dim emptyTextBoxes =
    From txt In Me.Controls.OfType(Of TextBox)()
    Where txt.Text.Length = 0
    Select txt.Name
If emptyTextBoxes.Any Then
    MessageBox.Show(String.Format("Please fill following textboxes: {0}",
                    String.Join(",", emptyTextBoxes)))
End If
15
Rango

Я бы порекомендовал использовать событие Validating элементов управления TextBox с элементом управления ошибкой (просто добавьте его в форму):

Private Sub TextBox_Validating( sender As System.Object,  e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating, TextBox2.Validating, ComboBox1.Validating
        Dim ctl As Control = CType(sender, Control)
        If ctl.Text = ""
            e.Cancel = True
            ErrorProvider1.SetError(ctl,"Please enter a value")
        End If
End Sub

Тогда вы можете просто позвонить:

ErrorProvider1.Clear()
If Me.ValidateChildren()
        ' continue on
End If

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

Наконец, если вы не хотите вводить все элементы управления, вы можете сделать это в форме загрузки:

For Each c As Control In Me.Controls
    If TypeOf(c) is TextBox or TypeOf(c) is ComboBox
        AddHandler c.Validating, AddressOf Me.TextBox_Validating
    End If
Next
7
John Koerner

Очень упрощенный подход будет состоять в том, чтобы собрать все элементы управления TextBox в последовательности, используя метод Enumerable.OfType LINQ, а затем выполнить итерацию по нему в цикле For Each :

Dim textBoxes = Me.Controls.OfType(Of TextBox);

For Each t In textBoxes
   If String.IsNullOrEmpty(t.Text) Then
       MsgBox("...")
       Exit For
   End If
Next t
5
Enrico Campidoglio

Если поле TextBox пустое, появится окно с сообщением «Complete Entry!».

Dim t
For Each t In Me.Controls
    If TypeOf t Is TextBox Then
        If t.Text = "" Then
            MsgBox("Complete Entry!")
            Exit Sub
            Exit For
        End If
    End If
Next
1
Kristian Hernan C. Manuel

Sub для проверки пустого текстового поля в GroupBox, вы можете использовать это:

Public Sub CheckEmptyTextbox(Byval groupbox as GroupBox)

Dim txt as control

For Each txt in groupbox.Controls

  IF TypeOF txt is Textbox then

     IF txt.Text="" Then


      MsgBox("Please Input data to textbox.")

      Exit For

     End IF

  End IF

Loop


End Sub
1
Se Chan

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

Public Sub ClearTextBox(ByVal root As Control)
For Each ctrl As Control In root.Controls
ClearTextBox(ctrl)
If TypeOf ctrl Is TextBox Then
CType(ctrl, TextBox).Text = String.Empty
End If
Next ctrl
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ClearTextBox(Me)
End Sub
0
Brent Hacker