0

何かを実行するボタンと、同じことを実行したいデータ グリッド上のダブルクリック イベントがある場合、1 つの機能のみを維持する必要があることを保証する最善の方法は何ですか?

以下を実行する以外に、2 つのイベントが同じことを行うことを示すための凝った C# の方法はありますか?

void button1_Click(...) { MyFunction(); }
void dataGrid1_DoubleClick(...) { MyFunction(); }
void MyFunction() {  // do stuff  }
4

3 に答える 3

1

DataGridView (WinForms) について話しているので、DataGridView のイベント DoubleClick の署名とボタン コントロールの Click イベントの署名は同じだと思います。(EventHadler)。この場合、フォーム デザイナーを使用して同じメソッドを設定するか、手動でイベントをバインドできます。

dataGridView1.DoubleClick += new EventHandler(MyFunction);
button1.Click += new EventHandler(MyFunction);

もちろん、MyFunction メソッドは EventHandler の予想される署名と一致する必要があります

private void MyFunction(object sender, EventArgs e)
{
   // do your work
}

数分後に回答を確認すると、次のように追加したいと思います。

センダー オブジェクト ( など) を使用してコントロールを区別する必要がある場合はControl c = sender as Control; if (c.Name == "someName")、最初のアイデアに戻ることをお勧めします。共通のメソッドを呼び出しますが、関連するコントロールごとに EventHandler を分けておきます。

于 2012-09-27T09:44:54.750 に答える
0

フォームのデザイナ ビューで VS を使用すると、コントロールのプロパティ ウィンドウで、各コントロールの各イベントに呼び出すプロシージャを設定できます。

画像

于 2012-09-27T09:41:45.517 に答える
0

スティーブが言ったことに追加するだけで、次のように、デザイナーのプロパティ ウィンドウの稲妻の下のイベントを使用する代わりに、フォームの Load イベントでこれらのイベントを関数に手動でバインドする必要があります。

private void Form1_Load(object sender, EventArgs e)
{
    button1.Click += MyMethod;
    dataGridView1.DoubleClick += MyMethod;
}

void MyMethod(object sender, EventArgs e)
{
    //Do Stuff
}

また、匿名メソッドが C# に導入されて以来、EventHandler クラスの新しいインスタンスを宣言することは冗長でした。上記のように、メソッドで直接イベントを指すことができます。

于 2012-09-27T10:14:12.973 に答える