2012-07-09 2 views
1
private void p01_Click(object sender, EventArgs e) 
    { 
     if (p01.Image == pmiss.Image) 
     { 
      score++; 
      makeMoleVisable(1, phit); 
     } 
     else 
     { 
      score--; 
      molesmissed++; 
     } 
    } 
    private void p02_Click(object sender, EventArgs e) 
    { 
     if (p02.Visible) 
     { 
      if (p02.Image == pmiss.Image) 
      { 
       score++; 
       p02.Image = phit.Image; 
      } 
      else 
      { 
       score--; 
       molesmissed++; 
      } 
     } 
    } 

안녕하세요, 저는이 그림 상자 클릭 이벤트가 36 회 있습니다. 모든 36 개의 그림 상자에 하나의 클릭 이벤트 만 사용하고 싶습니다. 또한 모든 클릭 이벤트는 동일한 작업을 수행하며 코드는 첫 번째 이벤트와 약간 다릅니다. 설명그림 상자 클릭 이벤트를 하나로 그룹화하려면 어떻게합니까?

+0

죄송합니다. 어떤 이유로 로그인하지 않으므로 내가 이와 같이 내 의견을 게시 할 것입니다. 유일한 문제는 (1, 핏)입니다. 이렇게하면 첫 번째 이미지 만 변경할 수 있습니다. 어떻게 makemoleVisible이 이미지에 대한 두더지와 함께 어떤 피 쿠르 박스를 피팅 할 것인지 알려주시겠습니까? –

답변

3

각 그림의 이벤트 속성으로 이동하여 p02_Click으로 설정하거나 나만의 맞춤 이름을 사용하십시오. 당신은 하나 개의 패널에있는 모든 그림 상자가있는 경우

, 당신은 시도 할 수 있습니다 : 당신은 또한 p01에 대한 Tag 속성을 설정 및 코드에서 해당 속성을 확인하여 pictureBox1있어 있는지 확인하기 위해 테스트 할 수 있습니다

foreach (Control p in mypanel.ControlCollection) 
{ 
    p = p as PictureBox; 
    p.Click += (p01_Click); 
} 

.

1

각 그룹 그림 상자에 이벤트 처리기 방법을 다시 사용할 수 있습니다. 메서드의 보낸 사람 인수에는 이벤트를 발생시킨 개체가 포함됩니다.

+0

안녕하세요. 저는 이걸 제대로 이해하고 있다고 생각합니다. 당신이 의미하는 바를 이해하지 못했습니다. 지금까지 나는 이것을 가지고있다 : –

+0

private void pBox_Click (객체 발신자, EventArgs e) { PictureBox temp = (PictureBox) sender; if (temp.Image == pmiss.Image) { score ++; makeMoleVisable (1, phit); } else { score--; molesmissed ++; } } –

+0

좋아 보인다. 작동합니까? temp.Image == pmiss.Image가 정확한 결과를 제공하는지 확실하지 않습니다. – Maarten

관련 문제