2009-11-20 6 views
2

즉, 예를 들어 레이블이있는 UserControl이 있습니다. 클라이언트가 UserControl의 MouseMove 이벤트에 등록하면 마우스가 레이블 위에 있거나 UserControl의 다른 곳에 있는지 여부에 관계없이 해당 이벤트를 가져와야합니다. 이것을 설정하는 가장 좋은 방법은 무엇입니까?자식 컨트롤을 자신의 자식 이벤트처럼 실행하도록 사용자 정의 컨트롤을 설정하는 방법은 무엇입니까?

C#을 내가 가장 좋아하는 트릭 이벤트가 속성에 비슷한 방식으로 구현됩니다 것을 기억하는 것입니다 당신을 위해 무엇을 요구하는지에 유사한 방법으로 이벤트 '통과'하는

답변

3

- 민간 대표 래퍼 . 당신은 addremove를 사용하여이 동작을 재정의 할 수 있습니다 숨길 수있는 더 나은 방법이있을 수 있음을

public new event EventHandler MouseMove { 
    add { m_Label.MouseMove += value; } 
    remove { m_Label.MouseMove -= value; } 
} 

주 (명시 적으로 Control.MouseMove를 숨길 new 사용)/MouseMove 이벤트를 오버라이드 (override) -이보고에 의해 구현되는 방법 확인 reflector의 Control에서 실제 기본 MouseMove 이벤트를 얻기 위해 재정의 할 수있는 후크가 있는지 확인하십시오. 물론, 이벤트는 사용자가 원하는대로 이름이 될 수있는이 같은 것을 기본 MouseMove 이벤트를 숨기거나하지 않으려면 :

public new event EventHandler MouseMove { 
    add { 
     m_Label.MouseMove += value; 
     base.MouseMove += value; 
    } 
    remove { 
     m_Label.MouseMove -= value; 
     base.MouseMove -= value; 
    } 
} 
당신은 포함 된 컨트롤에서 이벤트를 "번역"할 필요가
+0

좋은 예 thecoop! –

+0

굉장합니다. 내가 기대했던 것보다 훨씬 더 간단하다. –

0

귀하의 UserControl을 통해 ...

내 말은 당신이 UserControl의 자식에있는 모든 단일 이벤트를 처리하고 이벤트 처리기가 등록되어있는 경우 클라이언트 코드에 다시 실행해야한다는 것입니다.

관련 문제