1

SetCameraCountコントロールが実際に表示される前および/または後に使用できるメソッドを持つ UserControl を作成しています。

コントロールが表示される前にSetCameraCountが使用された場合は、コントロールが最初に読み込まれたときにそれを使用するように設定する以外に何もすべきではありません。cameraCount

コントロールのロード後SetCameraCountにis used が設定されている場合、コントロールは、新しい値を使用して初めてロードされたときと同じ方法で更新されます。cameraCount

これを実現するために_IsLoaded、bool として使用して、UserControl がロードされているかどうかを確認しています。

bool _IsLoaded;

int cameraCount;

public void SetCameraCount(int cameraCount)
{
    if (this.cameraCount != cameraCount)
    {
        this.cameraCount = cameraCount;

        if (_IsLoaded)
            buildMenu();
    }
}

void CamMultiple_Load(object sender, EventArgs e)
{
    buildMenu();
    _IsLoaded = true;
}

void buildMenu()
{
    // this method will absolutely fail if the control is not loaded
    // ...
}

私はこのパターンを非常に頻繁に使用しています。

_IsLoaded正常に動作しますが、 bool を Windows フォームに既に実装されているプロパティに置き換えることができるのではないかと思います。今のところ、何も見つかりませんでした。そんな物件をご存知ですか?

4

1 に答える 1

1

他のビジュアル要素に影響を与える UserControl プロパティ値の変更は、次の 2 つのシナリオを処理する必要があります。

  • コントロールが表示される前: コントロールは作成されますが、まだコントロール コレクションに追加されていません。Load イベントはまだ発生しておらず、コントロールに含まれる一部のビジュアル要素はまだ準備ができていません。そのため、プロパティ値をどこかに保存し、コントロールの Load イベントが発生したときに使用する必要があります。

  • コントロールがロードされた後: コントロールが使用する視覚要素の準備が整います。プロパティ値の変更を適切に適用できます。

そのため、質問に記載されているパターンを使用します。

Hans Passant のコメントによるとIsHandleCreated、コントロールが読み込まれると、プロパティは true になります。Created プロパティも機能しているようですが、さらにテストする必要があります。

于 2013-05-22T20:44:32.887 に答える