私は C# winforms プロジェクトで作業しており、ツール ストリップ メニューからの選択時に読み込まれるユーザー コントロールがあります。他の機能のために、ユーザー コントロールのフォーム ロード時に発生する辞書ルックアップを設定しています。また、ユーザー コントロールを閉じるときは、「.Hide();」を使用しているだけです。方法。最初にユーザーコントロールをロードするとすべて問題ありませんが、2回目に閉じて再度開くと、オブジェクトの新しいインスタンスが作成されるため、辞書検索がスローされます。したがって、問題を解決するためにいくつかのコードを書きました。
私がしなければならないことは、ユーザー コントロールのインスタンスが既に存在する場合は、そのオブジェクトの新しいインスタンスを作成しないということです。代わりに、ユーザー コントロールを再び表示できるようにします。したがって、この目的を達成するためにコードを書きました。初めてアイテムを選択したときは、すべて問題ありません。ユーザー コントロールを非表示にして再度開こうとしても、何も起こりません。
以下は、ツール ストリップ メニューから項目を選択したときに発生する、この目的のために作成したコードです。
if (Controls.ContainsKey("CheckAvailUserControl"))
{
Controls["CheckAvailUserControl"].Dock = DockStyle.Fill;
Controls["CheckAvailUserControl"].Visible = true;
Controls["CheckAvailUserControl"].Show();
Controls["CheckAvailUserControl"].Refresh();
}
else
{
UserControl checkAvailUserControlLoad = new CheckAvailUserControl();
Controls.Add(checkAvailUserControlLoad);
checkAvailUserControlLoad.Dock = DockStyle.Fill;
checkAvailUserControlLoad.Visible = true;
checkAvailUserControlLoad.Show();
}
デバッガーでコードをトレースすると、実際には上記の if/else ステートメントの正しい部分にヒットしています。2回目にロードしようとしたときに、ユーザーコントロールが画面に表示されないだけです。
問題は、ユーザー コントロールを閉じてからツール ストリップ メニューから再度選択した後、ユーザー コントロールを正しく読み込むにはどうすればよいかということです。