如何检查掩码文本框是否为空?

8
我有几个文本框和掩码文本框在winform中,需要在继续之前检查它们是否为空、null或为nothing。

目前我的代码大部分都能按预期工作,如果有一个空的文本框,我会得到一条消息告诉用户文本框为空,并退出子程序,但是出于某种原因,它没有检查掩码文本框。

也许我错了,它正在检查它们,但由于它们有掩码,它们不被视为空或null。

如果您能帮忙检查掩码文本框是否为空,将不胜感激。

这是代码:

Private Sub btnCargarInformacion_Click(sender As System.Object, e As System.EventArgs) Handles btnCargar.Click
    For Each myControl As Control In Me.GroupBox1.Controls
        If TypeOf (myControl) Is TextBox Then
            If myControl.Text.Equals(String.Empty) Then
                MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name)))
            End If
            If myControl.Text.Equals(String.Empty) Then
                Exit Sub
            End If
        End If
    Next
    Dim PartePersonalTableApt As New PersonalObraDataSetTableAdapters.PartePersonalTableAdapter
    Dim PersonalObTableApt As New PersonalObraDataSetTableAdapters.PersonalObTableAdapter
    PartePersonalTableApt.ClearBeforeFill = True
    PartePersonalTableApt.FillByFecha(PersonalObraDataSet.PartePersonal, txtDate.Text, txtDepartamento.Text, txtTurno.Text)
    PersonalObTableApt.ClearBeforeFill = True
    PersonalObTableApt.Fillby(PersonalObraDataSet.PersonalOb)
End Sub
4个回答

5
if textbox.MaskCompleted=True Then
    'they entered something 
else
     ' they didnt enter anything

Endif

2

问题在于你只在这一行中查找 TextBox 对象:

If TypeOf (myControl) Is TextBox Then

由于MaskedTextBox控件不是从TextBox类继承的,因此需要单独检查该类型,如下所示:

If (TypeOf (myControl) Is TextBox) Or (TypeOf (myControl) Is MaskedTextBox) Then

然而,由于它们都继承自TextBoxBase类,因此你可以只检查该类:

If TypeOf (myControl) Is TextBoxBase Then

我已将其更改为texboxbase,但它仍然忽略了maskedtexbox。 - David

1

试试这个:

If TypeOf myControl Is MaskedTextBox Then
        If CType(myControl, MaskedTextBox).Text.Equals(String.Empty) Then
            MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name)))
        End If
        If CType(myControl, MaskedTextBox).Text.Equals(String.Empty) Then
            Exit Sub
        End If
End If

抱歉,我不知道...我认为控件的索引号是它们添加到表单中的顺序,如果这有帮助的话,循环可能会按照这个顺序进行,但我不能百分之百确定。 - Eric J
我也不确定你的第二个问题。如果你的控件名称是txtShift,你需要想办法去掉“txt”,或许你可以从第一个大写字母入手。也许有更好的方法来完成它。这只是一个短暂的想法。 - Eric J
您可能还想查看使用控件的tooltiptext属性或tag属性。也许您可以使用.tag或.ToolTipText而不是.Name。我从未尝试过这样的事情,只是我的个人意见。不过我明白您想要实现什么。 - Eric J
看看这个链接。他们正在讨论如何在vb.net中使用tab顺序循环遍历控件。应该会有所帮助,但听起来相当繁琐且不太可靠:http://www.vbforums.com/showthread.php?290986-For-Each-Loop-In-TabIndex-order - Eric J
奇怪的是没有人告诉你使用MaskComplete和MaskFull(两者都是MaskedTextBox属性)来知道所有空白是否完全完成,如果掩码不完全完成,则为false。 - Esselans
显示剩余2条评论

1

未经测试,但可以用掩码文本框的 Mask 属性来检查是否为空,而不是检查 string.empty

If myControl.Text.Equals(myControl.Mask) Then
    MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name)))
End If

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接