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 私の問題は、マークアップから設定しようとすると、列挙値がインテリセンスに表示されないことです。私の同僚がこの関連するサポート リクエストを見つけたので、これは既知の問題のようです。

私の質問は、このコントロールで必要なすべての動作をサポートし、このプロパティで IntelliSense を維持するための最良の方法は何ですか?

4

2 に答える 2

5

この問題を再現できます。列挙を null 可能にすると、インテリセンスが機能しなくなります。これは、null 許容型がオブジェクトであるためだと思います。

列挙を NOT nullable として保持することをお勧めします。NotSetまたはのデフォルト値があります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 の変数を宣言すると、その変数のデフォルト値は Zero になります。例えば; SomeEnumeration SomeProperty;

SomeProperty の値は SomeEnumeration.Zero になります

于 2012-10-03T20:15:46.233 に答える