在C#app中几个窗口之间进行交互的最佳/正确方法是什么? 最近,我遇到了一个问题,其中一个程序窗口必须调用方法修改主窗口。我的解决方案是创建类似工厂的类,它将安排所有底层模型数据并组织各种窗口之间的通信(通过委托)。但是,由于传递一个或两个代表不是问题,我开始思考如果我的其他窗口需要10个代表与主窗口正确交互?代表们是好的解决方案吗?如何通过构造函数,属性以良好的方式传递它们?或许使用那么多代表的需要是一些严重的设计缺陷本身?
答案 0 :(得分:3)
您需要通过Controller从视图中拆分模型。放置一个能够同时具有表单引用并且能够管理共享信息的对象。
另一个解决方案是将formX的引用发送到formY,这样他们就可以进行通信。
答案 1 :(得分:1)
我们使用自定义构建的表单管理器,它使用主题/观察者模式。
每个展开的表单都会报告给FormsManager,FromsManager使自己成为表单的观察者。
它还使表单成为FormsManager的观察者。
因此,您最终得到每个表单,观察FormsManager和FormsManager观察每个表单。然后,每个表单都可以通过FormsManager与任何其他表单进行通信,而每个表单都不必知道所有其他表单。
答案 2 :(得分:0)
如果只需要与主窗口进行交互,为什么不在其他窗口的构造函数中引用主窗口?
public class MainForm : Form
{
}
public class OtherForm : Form
{
protected MainForm MainForm { get; set; }
public OtherForm(MainForm mainForm) : base()
{
this.MainForm = mainForm;
}
}
编辑:
简单有效。
如果您的表单需要与应用程序的所有其他形式进行交互,那么service locator类型模式可能更适合。
答案 3 :(得分:0)
以前使用MFC,有一些东西可以通知所有窗口。您将使用参数传递事件ID。
您可以使用一个代理来执行类似的操作,该代理将公开事件ID和参数集合。
这样做的最大好处是windows只需要实现一个网关。
答案 4 :(得分:0)
您可以使用单个委托,使用自定义EventArgs传递多个信息,例如:notificaton类型,其他参数等。