0

我有 vb 2008 Winforms 应用程序。

在我的分支表单中,我有 11 个文本框字段,我想验证其中的 8 个,无论是强制性的还是必需的格式,例如英国邮政编码、英国电话号码等。

我现在的问题是,当验证开始时,它首先验证最后一个文本字段(或似乎是)

这是我的代码

For Each oCtrl As Control In Me.Controls
    If TypeOf oCtrl Is TextBox Then
        oCtrl.Focus()
        If Validate() = False Then

            Exit Sub

        End If
    End If
Next

请问怎么了?

4

1 回答 1

1

请问怎么了?

控件集合未排序或分组。您的循环将按照集合中的任何顺序访问它们。

如果没有更多代码,很难说如何修复它。然而,小费可能是有序的。使用相同的处理程序来处理每个文本框的验证事件。这样,您可以将用户保留在该文本框,直到输入有效。

是否可以按照表单 Shown 事件中的选项卡索引的顺序将项目添加到集合中,请问我该怎么做?

A List(Of TextBox) 和自定义排序器可能是要走的路

Dim AllTB As New List(Of TextBox)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    AllTB.AddRange(Me.Controls.OfType(Of TextBox))
    AllTB.Sort(Function(x, y) x.TabIndex.CompareTo(y.TabIndex))
End Sub

要遍历文本框,请使用:

For Each tb As TextBox in AllTB

因为文本框通过引用在列表中,您可以获取或设置文本框中的任何属性,并且任何更改都将反映在您的表单上。您还可以对文本框、标签属性等使用顺序名称并按此排序。

于 2013-07-01T16:35:14.457 回答