UI其他类的事件处理

时间:2014-01-17 21:27:47

标签: c# events

是否可以处理另一个类中的事件,但是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;

      }


   }

}

我想处理Button.Click()而不是OtherClass中的MainWindow事件。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

当你在后面的代码中注册事件处理程序时,这是可能的:

// Constructor of MainWindow class
public 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(...)
}

答案 1 :(得分: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);
}

这也让您可以非常轻松,动态地“热交换”处理程序界面。