2013-10-01 4 views
-1

에서 이벤트를 호출 할 수 없습니다 이제 내 문제는 form_load에서 사용할 때 이벤트가 호출되지만 버튼 이벤트에서 사용할 때입니다. 그냥 이벤트를 건너 뛴다면, 버튼 클릭을 디버깅 할 때 이벤트로 들어가려고했다. 하지만 이벤트가 버튼에서 호출되지 않는 이유를 알아 내려고 노력한 결과 진전이 없었습니다.내가 세 가지 이벤트를 버튼

+15

이러한 진술은 이벤트를 * 호출 * 이벤트 * 구독 *하지 않습니다. 그것은 매우 다릅니다. –

+0

그래서 당신이 등록하고있는'Paint' 이벤트가 발동 될 때만 핸들러가 호출됩니다. –

+1

Re :' "나는 세 가지 다른 이벤트가있다."- 아니, 당신은 세가지 다른 이벤트 핸들러를 가지고있다. –

답변

4

다른 사람들이 지적한대로 pnlTiles.Paint += pnlTiles_Paint;pnlTiles 컨트롤의 Paint 이벤트에 가입하고 있음을 의미합니다. 즉, pnlTilesPaint 이벤트를 발생시킬 때마다 pnlTiles_Paint에 지정된 메서드가 호출됩니다. Paint의 원인은 무엇입니까? 제어 다시 그리면 msdn에 따르면

페인트 이벤트가 발생된다. PaintEventArgs의 인스턴스를 Paint 이벤트를 처리하는 메서드로 전달합니다.

그래서 아마 무슨 일이 일어나고 있는지 핸들러가 호출 받고 끝나는 이유 (이 pnlTiles가 화면에 그려지고 처음부터) 기본 양식이 Load 이벤트를 발생 후에 pnlTilesPaint 이벤트를 발생시키는 것입니다.

그러나 버튼을 클릭해도 pnlTiles이 다시 그려지고 Paint 이벤트가 발생하지 않으므로 처리기가 호출되지 않습니다.

어떤 이유로 든 Button's 클릭 핸들러에 핸들러를 연결 한 후에 pnlTiles을 다시 그려야하는 경우 pnlTiles_Paint이 호출됩니다. pnlTile'sPaint 이벤트를 구독 한 후 Button's 클릭 핸들러에서 pnlTiles.Invalidate()을 호출하여 테스트 할 수 있습니다.

private void btnUpdate_Click(object sender, EventArgs e) 
{ 
    pnlTiles.Paint += pnlTiles_Paint; 
    pnlTiles.Invalidate(); 
} 

당신이 이벤트의 기본에 약간 퍼지있어 이후

, 그것은이 기사를 읽고 가치가있을 수 있습니다

Jon Skeet - Events

MSDN - Events.

또한 동일한 이벤트를 여러 번 구독하지 않는 것에 대한이 게시물의 cgijbels 코멘트를 읽으십시오.

+1

'pnlTiles_Paint' 메소드를'btnUpdate_Click' 메소드의'Paint' 이벤트에 등록하지 마십시오. 버튼을 클릭 할 때마다'Paint' 이벤트에 __another__ subscription을 추가 할 것이므로, 그것은 같은 방법이거나 아닙니다. 그리고 당신의'pnlTiles_Paint' 메쏘드는 동일한'Paint' 이벤트 중에 여러번 실행될 것이고, 버튼을 클릭할수록 느려지 게됩니다. 따라서 단 한 번만 구독하거나 버튼을 클릭 할 때 정말로 구독해야하는 경우 다시 가입하기 전에 구독을 취소해야합니다. – cgijbels

+0

물론, 좋은 조언입니다. 나는 특정 행동에 관한 질문에 단순히 답하고 있었기 때문에 할일에 대해 이야기하는 것이 중요하다고 생각하지 않았고 이벤트에 가입하지 않아도되었습니다. –

관련 문제