私のフォームは3ペインの電子メールクライアントのように見えます。左側は人のリストを含むグリッドです。右上は現在の人物の詳細レコードです。右下の専門知識の現在の人の領域を表示する多くのチェックボックスでカスタムコントロールです:[x]は、調理コントロールが初期化されるのを待つ
[x]のウィンドウのクリーニングが[x]は、脳の手術
[x]はマッサージ療法[X]歌詞のランダムな行為
フォームを開くと、フォームの左側のグリッドにリストされている最初の人にフォーカスが移動し、グリッドのfocused_row_changedイベントが発生します。このイベントのハンドラでは、現在の人物のIDを取得し、その人物の詳細データをデータベースから取り出して詳細レコードを取り込み、その人物の専門分野の行を取り出してチェックボックスを設定します。フォームが最初に開かれたとき以外は、多くのチェックボックスを持つカスタムコントロールがまだ初期化されていないため、これはすべて正常に動作しています。その時点で、MyCustomControlはnullです。
if (null != MyCustomControl)
{
MyCustomControl.SetCheckedValues(datasource);
}
この状況を処理するためのベストプラクティスデザインパターンは何ですか?私のコントロールがまだ完全に初期化されていないとき、私はここで何をしますか?
if (null != MyCustomControl)
{
MyCustomControl.SetCheckedValues(datasource);
}
else
{
// ?? Wait around for a bit and keep trying every 100ms?
}
:あなたのコントロールで
、あなたのような何かを置く:インターフェイスを実装するコントロールのための
Windowsフォームデザイナのチェックをし、
.Designer.cs
ファイルにこのコードを生成しますMyCustomControlが初期化される時期と、その初期設定が依存する項目についてもう少し詳しく説明します。 – Yetti