【问题标题】:vb.net For Each loop on specific textboxesvb.net For Each 特定文本框上的循环
【发布时间】:2015-01-28 23:02:46
【问题描述】:

我有一个 ComponentOne 输入面板“inputPanel”从数据库中提取记录,

我想验证除名称文本框“txtNAME”之外的所有框,

“检查”是一个测试没有特殊字符的函数

For Each ctrl As Control In inputPanel.Controls

            If ctrl.Name <> "txtNAME" Then
                check= ctrl.Text
                If NumText(check) = False Then
                    MessageBox.Show("You can only Enter Numbers and Text for this field", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    ctrl.Focus()
                    Exit Sub
                End If
            End If
        Next

它仍在检查 txtName 是否有特殊字符

有什么帮助吗?

【问题讨论】:

  • 名称是否完全正确?您的比较是类型敏感的。
  • 名称正确,忽略
  • 就其价值而言,像这样比较名称并不是很好。我会推荐If ctrl IsNot txtNAME Then
  • 您在此面板中是否有其他类型的控件? (例如标签)
  • 是的标签和文本框,它只是忽略了 isNot too。

标签: vb.net for-loop foreach


【解决方案1】:

将循环仅限于文本框,丢弃同一控件集合中存在的标签或按钮等控件

For Each txtBox In inputPanel.Controls.OfType(Of TextBox)
    If txtBox.Name <> "txtNAME" Then
        check= txtBox.Text
        If NumText(check) = False Then
            .....
        End If
    End If
Next

你也可以丢弃不需要的文本框

For Each txtBox In inputPanel.Controls _
        .OfType(Of TextBox) _
        .Where(Function(x) x.Name <> "txtNAME")
   check= txtBox.Text
   If NumText(check) = False Then
        .....
   End If
Next

在不丢弃非 TextBox 控件的情况下,您循环还将面板控件集合中的每个标签传递给 NumText 方法,并且可能是触发错误消息的标签文本,而不是 txtNAME 框-

【讨论】:

  • 它们都不起作用,很奇怪一定是c1面板。生病只需要为他们使用ifs。感谢任何方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多