2

Windows Formsには 40 以上のコントロール (TextBox、RadioButton、CheckBoxes など) があります。各コントロールは、EventHandlers (TextChanged、CheckChanged など) に登録されます。

フォームの初期化中にこれらのイベントが発生しないようにしたい。

初期化の前にすべてのイベントのサブスクライブを解除し、後でサブスクライブするのは面倒です。

これを達成するための最良の方法はどれですか?

4

4 に答える 4

1

提供した情報はごくわずかですが、もちろん次のものを使用することもできます。

Boolean Loading = false;

{
    Loading = true;
    LoadData();
    // LoadData must set the fact it's finished...
}

そして、イベントハンドラーで:

if (Loading)
    return;
于 2012-09-20T11:32:11.617 に答える
1

私のいつものばかばかしいほど単純な解決策は、各イベント ハンドラによってチェックされるフォーム プロパティを持つことです。

例えば

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.

これを行うための面倒な方法があるかどうかはわかりません。

于 2012-09-20T11:36:24.717 に答える
0

次のようなすべてのコントロールを列挙できます。

private void DisableAllHandlers()
{
    foreach (var control in this.Controls)
    {
       // Use reflection
    }
}

また、記事「コントロールからすべてのイベント ハンドラーを削除する方法」のソースを使用して、選択したコントロールのハンドラーを無効にします。

于 2012-09-20T11:45:25.793 に答える
0

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);
}
于 2012-09-20T11:38:15.033 に答える