私はPanel[,]
の中にいくつかのパネルがあるウィンドウフォームを持っています。ユーザーがパネルのいずれかをクリックするたびに、クリックされたパネルを処理するための固有のイベントが必要です。私はswitch文を持つ単一のイベントを持つことを考えましたが、それは比較的同じ習慣であると考えていましたし、扱いが面倒かもしれません。あなたがイベントを行うには良い方法をご存知の場合複数のイベントリスナーに反映されたメソッドを呼び出すC#
Type t = typeof(Program);
var methods = t.GetMethods(BindingFlags.Public | BindingFlags.Static).Where(m => m.Name.EndsWith("_click")).ToArray();
char[] cArr = { 'a', 'b', 'c', 'd' };
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
MethodInfo method = methods.Single(
m => m.Name == cArr[i].ToString() + (j + 1) + "_click");
// method.Invoke(null, null);
// myPanels[i, j].Click += new EventHandler();
}
}
private void a1_click(object sender, System.EventArgs e)
{
MessageBox.Show("Unique event A1");
}
private void a2_click(object sender, System.EventArgs e)
{
MessageBox.Show("Unique event A2");
}
//...
private void d4_click(object sender, System.EventArgs e)
{
MessageBox.Show("Unique event D4");
}
:たぶん私が何をしようとしている
はこれに似ています。..すべて間違ってイベントハンドラのデザインについてつもりです私はそれを理解したいと思うので、デザインアプローチから私に知らせてください。しかし、この例のように、私はEventHandler内にメソッドを置くことになっています。私はそれらを手動で割り当てられている場合、私はちょうどこのような何か行うことができます:
myPanels[0, 0].Click += new EventHandler(a1_click);
をしかし、割り当て部を介して、私は思いますむしろ、ループ、またはイベントそのものを再考します。
何か助けていただければ幸いです。
それはその非常に考えにくいですこれらのパネルのイベントハンドラはすべて完全に無関係であり、互いに何の関係もありません。実際に* *の場合、イベントハンドラを動的に配線することは意味がありません。イベントの実際の処理がまったく関係がないのに対し、イベントハンドラの配線はすべてのアイテムで共通するのはなぜですか? – Servy
あなたは何をしますか:すべてのパネルで共通の動作を持つユニークなイベントハンドラを作成しますか?イベントが無関係であれば、各パネルには独自のイベントがあるはずです – mnieto
@mnieto質問には、具体的には*そうしたくないと言われています。 – Servy