现在,在代码的某个时刻,我想检查_IsHidden是否设置为True或False并显示该信息。由于用户可以在创建控件时编辑此值,因此在创建时不会设置这些值。
所以我尝试的是:
(所有这些都在MDI表格上)
For Each frm as CustomForm in Main.MdiChildren
If frm.MyName = calledBy Then 'this part is just to know which form called the form to create the object
For Each cntrl as CustomTextBox in frm.Controls
'DO Something
Next
End if
Next
现在..如果第一个控件是自定义ComboBox,它会发出错误,因为它看到它与自定义TextBox控件不匹配..
我该如何解决这个问题?根据我的理解,它应该只是通过所述表格上的所有控件,只检查那些匹配CustomTextBox控件?
谢谢
答案 0 :(得分:4)
For Each x As T In collection
不将您的收藏品过滤为T
类型的收藏品。它会尝试将collection
中的每个项转换为T
,如果失败则会抛出异常。
因此,您有以下选择:
请自行检查,例如,使用RB提供的代码。
或者,您可以首先过滤列表 ,然后循环浏览项目。在这里,LINQ可以提供帮助:
For Each cntrl In frm.Controls.OfType(Of CustomTextBox)()
... ' Do this for all CustomTextBoxes
Next
For Each cntrl In frm.Controls.OfType(Of CustomComboBox)()
... ' Do this for all CustomComboBoxes
Next
此处不需要As CustomTextBox
子句,因为frm.Controls.OfType(Of CustomTextBox)()
会返回IEnumerable(Of CustomTextBox)
,因此For Each
可以自行推断cntrl
必须是输入CustomTextBox
。
答案 1 :(得分:0)
根据我的理解,它应该只是通过所有控件 所述表单只是检查那些匹配CustomTextBox控件的人吗?
我害怕这不正确。您需要自己实施该检查,例如:
For Each cntrl as object in frm.Controls
If TypeOf cntrl Is CustomTextBox Then
With CType(cntrl, CustomTextBox)
.DoSomethingWithControl()
.DoSomethingElseWithControl()
End With
End If
Next