2013-09-02 15 views
1

OpenNETCF.IOC (UI) 라이브러리를 사용하는 C# 프로젝트 (.NET CF)가 있습니다.모든 SmartPart에 대해 맞춤 이벤트를 만드는 방법은 무엇입니까?

실제 상황 : 기본 양식 OnKeyDown 이벤트가 처리되고 사용자 이벤트를 발생할 수 있습니다 (예 : 사용자 ESC 단추를 누른 경우). 이 이벤트는 하위 형식으로 처리 할 수 ​​있습니다.

리팩토링 후 : 기본 폼이 이제 컨테이너 폼입니다. 모든 자손 양식은 이제 SmartPart입니다. 컨테이너 양식에서 SmartPart로 맞춤 이벤트를 어떻게 제기해야합니까?

// Base form 
private void BaseForm_KeyDown(object sender, KeyEventArgs e) 
{ 
    // Handle ESC button 
    if (e.KeyCode == Keys.Escape || e.KeyValue == SomeOtherESCCode) 
    { 
     this.ButtonESCClicked(sender, new EventArgs()); 
    } 
} 

// Descendant form 
private void frmMyForm_ButtonESCClicked(object sender, EventArgs e) 
{ 
    this.AutoValidate = AutoValidate.Disable; 
    ... 
} 

답변

2

나는이 질문에 대해 충분히 이해하지 못했지만 대답하려고 노력할 것입니다. 당신이 다른 이동하려는 경우

public abstract ParentClass : Smartpart 
{ 
    public event EventHandler MyEvent; 

    protected void RaiseMyEvent(EventArgs e) 
    { 
     var handler = MyEvent; 
     if(handler != null) handler(this, e); 
    } 
} 

public ChildClass : ParentClass 
{ 
    void Foo() 
    { 
     // rais an event defined in a parent 
     RaiseMyEvent(EventArgs.Empty); 
    } 
} 

: 당신은 자식 클래스에서 이벤트를 발생하고 싶지만, 그 이벤트가 기본 클래스에 정의되어있는 경우, 당신은 기본에 "도우미"방법을 사용한다 부모에게 자녀에게 알리도록 지시하면 다음과 같이됩니다.

public abstract ParentClass : Smartpart 
{ 
    protected virtual void OnMyEvent(EventArgs e) { } 

    void Foo() 
    { 
     // something happened, notify any child that wishes to know 
     OnMyEvent(EventArgs.Empty); 

     // you could optionally raise an event here so others could subscribe, too 
    } 
} 

public ChildClass : ParentClass 
{ 
    protected override void OnMyEvent(EventArgs e) 
    { 
     // this will get called by the parent/base class 
    } 
} 
+0

감사합니다. A 필요/내가 항상 모든 맞춤 스마트 파트에 대해 상위 SmartPart를 만들어야한다고 언급 했습니까? – hellboy