Panel[,]
내에 여러 개의 패널이있는 windows- 폼이 있습니다. 사용자가 패널을 클릭 할 때마다 클릭 한 패널을 처리 할 특정 이벤트가 필요합니다. 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