我循环浏览某个标签页上的所有控件,并抓取.tag
属性,以便从checked
的复选框中执行一些进一步的操作。
但是,我要求这些控件按特定顺序循环(我希望它们可以按tab index
排序),但看起来它们不是。
有没有办法强制他们循环的顺序?感谢。
Dim objCtrl As Control
For Each objCtrl In Me.objConfigForm.tabPageGeneral.Controls
If TypeOf objCtrl Is CheckBox AndAlso DirectCast(objCtrl, CheckBox).Checked Then
Dim strProp As String = DirectCast(objCtrl, CheckBox).Tag
Dim strListItem As String = CallByName(objUser, strProp, CallType.Get)
lstGeneral.Add(strListItem)
End If
Next
答案 0 :(得分:4)
使用LINQ按TabIndex
对控件进行排序,如下所示:
For Each objCtrl As Control In Me.Controls.Cast(Of Control).OrderBy(Function(c) c.TabIndex)
If TypeOf objCtrl Is CheckBox AndAlso DirectCast(objCtrl, CheckBox).Checked Then
Dim strProp As String = DirectCast(objCtrl, CheckBox).Tag
Dim strListItem As String = CallByName(objUser, strProp, CallType.Get)
lstGeneral.Add(strListItem)
End If
Next
注意:上面的代码要求将
System.Linq
命名空间导入到您的代码文件中,以支持Cast()
和OrderBy()
LINQ扩展方法。
答案 1 :(得分:1)
使用.OrderBy()
扩展程序选择订单。此外,在我们处理此问题时,您可以将If
块替换为Where()
和OfType()
扩展名,以减少嵌套和转换:
For Each box As CheckBox In Me.Controls.OfType(Of CheckBox)() _
.Where(Function(b) b.Checked) _
.OrderBy(Function(b) b.TabIndex)
lstGeneral.Add(CallByName(objUser, box.Tag, CallType.Get))
Next