我有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
出了什么问题?
答案 0 :(得分:1)
请问有什么不对?
未对控件集合进行排序或分组。你的循环将以集合所具有的顺序访问它们。
如果没有更多代码,很难说如何修复它。但是提示可能是有序的。使用相同的处理程序来处理每个文本框的validate事件。这样,您可以将用户保留在该文本框中,直到输入有效。
是否可以按照表格显示事件中的标签索引的顺序将项目添加到集合中,我该怎么做?
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
因为TextBox在引用列表中,您可以获取或设置文本框中的任何属性,任何更改都将反映在您的表单上。您还可以对文本框,标记属性等使用顺序名称,并按此排序。