我对vb.net相当新,我想知道我是否正在做这件事。
在我的程序中,我创建了一个自定义控件(CustomControl
),该控件具有自定义属性(CustomProperty
)。
在程序中,我有一个For Each语句,用于检查表单中的每个CustomControl
,如果满足某些条件,则会更改CustomProperty
的值:
For Each _CustomControl as Control in Controls
If TypeOf _CustomControl is CustomControl and [criteria met]
_CustomControl.CustomProperty = value
End If
next
每当我输入第三行时,它会给我以下消息:
' CustomProperty的'不是' Control'的成员。
我知道我的自定义属性通常不属于' Controls',我想知道是否应该添加某些代码或者是否应该以其他方式键入它。
感谢您提供的任何帮助。
答案 0 :(得分:2)
你必须在你的条件下使用AndAlso
:
For Each _CustomControl As Control In Controls
If TypeOf _CustomControl Is CustomControl AndAlso [criteria met]
_CustomControl.CustomProperty = value
End If
Next
您尝试访问默认CustomProperty
上的Control
。对于AndAlso
,如果第一部分不为真,则不评估条件的第二部分。
You can find some explanations about the difference between And
and AndAlso
on StackOverflow.
答案 1 :(得分:2)
给出的答案很好,但更好的方法是使用OfType
预先过滤掉不需要的控件。这使得类型检查不必要。
For Each _CustomControl in Controls.OfType(Of CustomControl)
If [criteria met]
_CustomControl.CustomProperty = value
End If
Next
如果您不想使用它,那么在尝试访问CustomControl
之前需要转换为CustomProperty
类型:
For Each _CustomControl As Control In Controls
If TypeOf _CustomControl Is CustomControl And [criteria met]
DirectCast(_CustomControl,CustomControl).CustomProperty = value
End If
Next