自定义属性不是Control [vb.net]

时间:2018-01-16 09:35:35

标签: vb.net visual-studio-2015

我对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',我想知道是否应该添加某些代码或者是否应该以其他方式键入它。

感谢您提供的任何帮助。

2 个答案:

答案 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