2011-11-29 2 views
2

Winform MouseDown 이벤트가 메서드로 설정된 경우 이벤트를 비우거나 재설정하는 방법을 알려줍니다. 그래서 화재시 전화 할 방법이 없습니다. 예를 들어이벤트를 다시 비우는 방법은 무엇입니까?

테이크 :

MouseDown += new System.Windows.Forms.MouseEventHandler(@SelectMouseDown); 

그리고 당신은 아무것도 또는 전무는 null에 MouseDown 이벤트를 재설정합니다.

나는 다른 StackOverflow 질문에 의해 다음을 할 수 없다고 생각합니다.

MouseDown -= System.Windows.Forms.MouseEventHandler(@SelectMouseDown); 

작동하지 않습니다.

+0

null로 설정하면 어떻게됩니까? – MilkyWayJoe

+0

Thiago Santos : Nil로 설정하면 컴파일러에서 "기본 이벤트에 액세스 할 수 없습니다"라는 오류가 발생합니다. – ThN

답변

2

테스트를 수행하지 않았지만 작업을 수행해야합니다. 행의 시작에 "new"를 추가하십시오.

MouseDown -= new System.Windows.Forms.MouseEventHandler(@SelectMouseDown); 
2

이 경우 다른 유형의 이벤트를 사용 중입니다. 처리기 목록을 완전히 지울 수있는 방법은 없습니다. 동일한 위임에 액세스 할 수있는 핸들러 만 제거 할 수 있습니다. 일반적으로 이것은 추가 한 핸들러 세트입니다.

표시 한 코드는 의 핸들러를 제거합니다. SelectMouseDown입니다. 그러나 그것은 다른 사람들을 깨끗하게하지 않을 것입니다.

이벤트 소유자는 모든 이벤트 핸들러를 제거하는 것이 이벤트를 null로 설정하는 것처럼 쉽습니다.

private event EventHandler _mouseDownEvent; 
public event EventHandler MouseDown { 
    add { _mouseDownEvent += value; } 
    remove { _mouseDownEvent -= value; } 
} 

void ClearMouseDown() { 
    _mouseDownEvent = null; 
}