質問

フォームデザイナを開発し、ボタンなどの標準コントロールを継承するカスタムコントロールも開発します。

また、関連するいくつかのプロパティがあります。たとえば、ユーザーは最初に部門を選択し、次に個人を選択する必要があります。ユーザーが人を選択した後、カスタムコントロールのテキストを設定します(この場合はボタンから継承します)。
注:ユーザーはTextプロパティを変更できます。

すべてが正しく機能しますが、DBから読み込むか、コントロールをフォームデザイナにドラッグアンドドロップすると、controlName#のテキストが設定され、

Textプロパティをオーバーライドしてデバッグした後、テキストが正しく設定されていることがわかりますが、テキストを設定した後、デザイナーはcontrolName#でテキストを設定しました。これは間違っています。

この問題の解決方法

事前に感謝
ハミド

役に立ちましたか?

解決

ReadOnly など、プロパティに適用できる属性があり、デザイナーがプロパティを設定するのを防ぎます。

現時点ではリンクが見つかりませんが、フォームデザイナに特定の順序でプロパティを設定するように伝える方法もあります。


編集:

わかりました、覚えていたものではありませんが、 ISupportInitialize インターフェース。

次のようなもの:

Public Class Test
    Implements ISupportInitalise

    private _numberOne as integer
    private _numberTwo as integer
    private _initalised as boolean

    Public Property NumberOne() as Integer
        Get
            return _numberOne
        End Get
        Set(value as Integer)

            if _initalised then
                'perform checks here'
            end if

            _numberOne = value 
        End Set
    End Property

    Public Property NumberTwo() as Integer
        Get
            return _numberTwo
        End Get
        Set(value as IntegeR)
            if _initalised then
                'perform checks here'
            end if

            _numberTwo = value 
        End Set
    End Property

    Public Sub BeginInit Implements ISupportInitalise.BeginInit
        _initalised = false
    End Sub

    Public Sub EndInit Implements ISupportInitalise.EndInit
        _initalised = true

        'perform all checks here'
    End Sub

End Class

この方法では、オブジェクトが完全に初期化されるまで、すべてのチェックを無効にできます。

他のヒント

オーバーライドされた Text セッターを controlName#に設定されているかどうかを確認し、設定されている場合は何もしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top