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

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

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

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

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

7 ответов


вы также можете использовать 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

интересный метод перечисли.Метод 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

Я бы рекомендовал использовать событие проверки элементов управления 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

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

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

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

A очень упрощенно подход будет собрать все TextBox элементов управления в последовательности с помощью перечисли.Метод oftype метод LINQ, а затем повторите его в Для Каждого петли:

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

Если TextBox поле пустое, тогда появится окно сообщения с надписью " полная запись!".

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

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

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

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

фристайл открытый класс

Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
    If Trim(TextBox3.Text) = "" And Me.Visible Then
        MsgBox("fill in the textbox")
        TextBox3.BackColor = Color.Yellow


    Else
        ' MsgBox("great one !!!")

    End If
End Sub

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    If Trim(TextBox2.Text) = "" And Me.Visible Then
        MsgBox("fill in the textbox")
        TextBox2.BackColor = Color.Yellow


    Else
        'MsgBox("great one !!!")

    End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click



    If Trim(TextBox1.Text) = "" Or Trim(TextBox2.Text) = "" Or Trim(TextBox3.Text) = "" And Me.Visible Then
        MsgBox("Please fill the necesary", MsgBoxStyle.Critical, "Error")
        TextBox1.Focus()

    Else
        MsgBox("Nice Work !!!")
    End If

End Sub

Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
    If Trim(TextBox1.Text) = "" And Me.Visible Then
        MsgBox("fill in the textbox")
        TextBox1.BackColor = Color.Yellow


    Else
        ' MsgBox("great one !!!")

    End If
End Sub

Класс