Проверьте наличие пустых элементов управления TextBox в VB.NET - PullRequest
8 голосов
/ 29 февраля 2012

У меня есть приложение Form в VB.NET.

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

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

.

Ответы [ 7 ]

18 голосов
/ 29 февраля 2012

Вы также можете использовать 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
7 голосов
/ 29 февраля 2012

Я бы порекомендовал использовать событие 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
5 голосов
/ 29 февраля 2012

A очень упрощенный подход будет состоять в том, чтобы собрать все элементы управления TextBox в последовательности, используя метод Enumerable.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
1 голос
/ 04 июня 2014

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 голос
/ 22 октября 2012

Если поле 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
0 голосов
/ 04 сентября 2017

Публичный класс вольным стилем

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

Конечный класс

0 голосов
/ 29 февраля 2012

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...