0

このコードをどこに書かなければならないのですか?

button1.MouseHover += Common_MouseHover;

問題は、1つのイベントハンドラーを宣言し、各ボタンをそのハンドラーに向けたいことです。これは一般的なハンドラーです。

private void Common_MouseHover(object sender, EventArgs e)
{
     Button btn = sender as Button;
     if (btn != null)
         btn.Image = pic
}

しかし、私はどこに書かなければならないのかわかりません:

button1.MouseHover += Common_MouseHover;
utton2.MouseHover += Common_MouseHover;
.. etc

デザイナーで?正確にはどこで?

4

3 に答える 3

3

フォームのデザイナーまたはコンストラクターで、または作成時に動的ボタンを作成している場合。

public Form1()
{
    InitializeComponent();

    button1.MouseHover += new EventHandler(Common_MouseHover);
    button2.MouseHover += new EventHandler(Common_MouseHover);

}

プロパティ エディタの場合。

ここに画像の説明を入力

于 2013-01-17T09:21:56.990 に答える
0

技術的には、いつ割り当てるかによって異なります。たとえば、特定の条件が満たされるまでそのメソッドでイベントを処理したくない場合があります。条件が満たされると、イベント ハンドラーを割り当てます。

注意しないと、イベント ハンドラーを割り当てるとメモリ リークが発生する可能性があることに注意してください。たとえば、同じイベント ハンドラーを継続的にイベントに割り当てるタイマーがあるとします。イベントに既にイベント ハンドラーがあるかどうか、それが null かどうか、または重複を防ぐために必要なものを確認する必要があります。-= 演算子を使用して動的にイベント ハンドラーを削除することもできます。

与えられた例では、フォームのコンストラクターは正しいように見え、手動でイベント ハンドラーを割り当てる最も一般的な場所です。

于 2013-01-17T09:32:22.913 に答える
0

-のConstructor にフォームで次の関数を呼び出しますInitializeComponent();

    private void init()
    {
        foreach (Control ctrl in this.Controls)
        {
            if (ctrl is Button)
            {
                (ctrl as Button).MouseHover += new EventHandler(Common_MouseHover);
            }
        }
    }

このように呼んでください -

    // Form Constructor
    public Form3()
    {
        InitializeComponent();
        Init();
    }
于 2013-01-17T09:34:02.730 に答える