是否可以处理另一个类中的事件,但是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
事件。
感谢您的帮助。
答案 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);
}
这也让您可以非常轻松,动态地“热交换”处理程序界面。