2010-06-23 32 views
1

我有一個類A,B從內部類提出一個事件在外部類處理,如何做?

class A 
    { 
     public class B 
     { 
      public event EventHandler handleClick; 
      public void eventraising(object sender, EventArgs e) 
      { 
       if (handleClick != null) 
        handleClick(this, e); 
      } 
     } 

     //handle raised event here 
    } 

我怎樣才能做到這一點

+0

順便說一句,最好的實踐說,你的事件應該被稱爲Click(見下面的其他評論),你的eventraising方法應該被稱爲OnClick並且是虛擬的,以便它可以被子類覆蓋。你也不需要sender參數,因爲你將它傳遞給你的事件處理程序(一件好事)。 – 2010-06-23 07:58:09

回答

2

A級需要的實例 B先在某處。在.NET中嵌套類只是一種組織類型的方法。它並不意味着任何一種實例的所有權。

所以你必須做一些事情,如:

class A 
{ 

    private B instanceOfB; 

    // constructor 
    public A() { 
     instanceOfB = new B(); 
     instanceOfB.handleClick += instanceOfB_handleClick; 
    } 

    // event handler 
    private void instanceOfB_handleClick(object sender, EventArgs e) { 
     // blah 
    } 

    public class B 
    { 
     public event EventHandler handleClick; 
     public void eventraising(object sender, EventArgs e) 
     { 
      if (handleClick != null) 
       handleClick(this, e); 
     } 
    } 

} 

而且,您的活動應該只是被稱爲點擊,不handleClick。

0

您在A.需要B的一個實例

class A 
{ 
    B b = new B; 

    A() 
    { 
     b.handleClick += (sender, ev) => { ... } 
    } 
}