Windows Formsには 40 以上のコントロール (TextBox、RadioButton、CheckBoxes など) があります。各コントロールは、EventHandlers (TextChanged、CheckChanged など) に登録されます。
フォームの初期化中にこれらのイベントが発生しないようにしたい。
初期化の前にすべてのイベントのサブスクライブを解除し、後でサブスクライブするのは面倒です。
これを達成するための最良の方法はどれですか?
Windows Formsには 40 以上のコントロール (TextBox、RadioButton、CheckBoxes など) があります。各コントロールは、EventHandlers (TextChanged、CheckChanged など) に登録されます。
フォームの初期化中にこれらのイベントが発生しないようにしたい。
初期化の前にすべてのイベントのサブスクライブを解除し、後でサブスクライブするのは面倒です。
これを達成するための最良の方法はどれですか?
提供した情報はごくわずかですが、もちろん次のものを使用することもできます。
Boolean Loading = false;
{
Loading = true;
LoadData();
// LoadData must set the fact it's finished...
}
そして、イベントハンドラーで:
if (Loading)
return;
私のいつものばかばかしいほど単純な解決策は、各イベント ハンドラによってチェックされるフォーム プロパティを持つことです。
例えば
private bool _inhibit = false;
private void Initialise()
{
_inhibit = true;
try
{
// initialise fields
}
finally
{
_inhibit = false;
}
}
Then just check the state of _inhibit in each handler.
これを行うための面倒な方法があるかどうかはわかりません。
次のようなすべてのコントロールを列挙できます。
private void DisableAllHandlers()
{
foreach (var control in this.Controls)
{
// Use reflection
}
}
また、記事「コントロールからすべてのイベント ハンドラーを削除する方法」のソースを使用して、選択したコントロールのハンドラーを無効にします。
InitializeComponent
フォームのコンストラクターでイベント ハンドラーを設定します。お気に入り:
form()
{
InitializeComponent();
// Set the event handlers to your controls like:
this.button1.Click += new System.EventHandler(this.button1_Click);
// Or
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
}