2014-01-17 55 views
0

是否可以處理另一個類中的事件,但是UI事件的MainWindow類?UI其他類的事件處理

例子:

class MainWindow 
{ 
    public Button b; 
    //Some Methods 
} 

class OtherClass 
{ 

    public async someMethod() 
    { 
     await someTaskToWait(); 
    } 
    public Task someTaskToWait() 
    { 
     if(...) 
     { 
     ButtonClickEvent mainWinButton_click = null; 
     mainWinButton_click= (_, __)=> 
     { 
      MainWindow.b.ClickEvent += mainwinButton_click; 
     } 

      MainWindow.b.ClickEvent -= mainwinButton_click; 

     } 


    } 

} 

我要處理的OtherClassMainWindowButton.Click()事件。

感謝您的幫助。

+0

有MainWindow的按鈕單擊事件調用其他類中的mainwinButton_click方法...? –

回答

0

當您註冊代碼的事件處理程序的背後,這將是可能的:

// Constructor of MainWindow class 
pubic MainWindow() 
{ 
    b.Click+=new OtherClass().mainwinButton_click; 
} 

你也可以從其他類

public class OtherClass 
{ 
    public void RegisterUnregister 
    { 
     // Reference to main class 
     MainWindow ref =...; 

     // register event... 
     ref.b.Click+=mainwinButton_click; 

     // Unregister event... 
     ref.b.Click-=mainwinButton_click; 
    } 
} 

註冊如果你的目標是什麼,有事件處理程序分成不同的文件,考慮使用部分類。

// MainWindow.cs 
public partial class MainWindow 
{ 
    // your button here 
} 

// MainWindow.Events.cs 
public partial class MainWindow 
{ 
    private void mainwinButton_click(...) 
} 
+0

我的目標是添加並從另一個類中刪除我的事件處理程序,請參閱問題,我對其進行了修改。 – DientesDeCheto

+0

@ user3167232:查看我更新的anser – David

0

您可以考慮改爲使用interface

public interface IMainWindowHandler 
{ 
    void ButtonClicked(object sender); 
} 

然後在你的MainWindow你會存儲一個IMainWindowHandler特性:非常輕鬆地動態

public IWindowHandler WindowHandler { get; set; } 

... 

void myButton_Click(object sender, EventArgs e) 
{ 
    if (this.WindowHandler == null) return; 

    this.WindowHandler.ButtonClicked(sender); 
} 

這也可以讓你「熱插拔」的處理程序接口。

相關問題