2

我正在开发一个自定义用户控件。用户控件具有映射到枚举的属性,并且不应具有任何默认值,即控件的使用者必须设置它。

物业:

<Description("This is the property description"),
Category("SomeCategory"), Bindable(True)>
Public Property SomeProperty As Enumerations.SomeEnumeration?

枚举:

Namespace Enumerations
    Public Enum SomeEnumeration
        Zero = 0
        One
        Two
    End Enum
End Namespace

支票:

If SomeProperty Is Nothing Then
    Throw New ApplicationException("You must set SomeProperty.")
End If

问题:

所有的逻辑都有效。我的问题是,当您尝试SomeProperty 从标记设置时,没有任何枚举值显示在智能感知中。我的一位同事发现了这个相关的支持请求,因此这似乎是一个已知问题。

我的问题是,在此控件上支持我需要的所有行为以及在此属性上保持智能感知的最佳方式是什么?

4

2 回答 2

5

我可以重新创建这个问题 - 使枚举为空会使智能感知停止工作。我猜这是因为可空类型是对象。

建议保持枚举不可为空。具有默认值NotSetor None。如果未设置枚举,您可能会在 getter 或初始化代码中引发异常。

财产

<Description("This is the property description"),
Category("SomeCategory"), Bindable(True)>
Public Property SomeProperty As Enumerations.SomeEnumeration

枚举

Namespace Enumerations
    Public Enum SomeEnumeration
        NotSet = -1
        Zero = 0
        One
        Two
    End Enum
End Namespace

查看

If SomeProperty Is SomeProperty.NotSet Then
    Throw New ApplicationException("You must set SomeProperty.")
End If
于 2012-10-03T15:15:31.543 回答
1
Public Enum SomeEnumeration
    NotSet = -1
    Zero = 0
    One
    Two
End Enum

enum 的默认值为 0,因此如果您声明 SomeEnumeration 的变量,该变量的默认值将为零。例如; SomeEnumeration SomeProperty;

SomeProperty 的值将是 SomeEnumeration.Zero

于 2012-10-03T20:15:46.233 回答