繁体   English   中英

视窗之间的互动

[英]Interactions between windows

在C#应用程序中的多个窗口之间进行交互的最佳/正确方式是什么? 最近,我遇到了一个问题,其中程序窗口之一必须调用修改主窗口的方法。 我的解决方案是创建类工厂类,该类将安排所有基础模型数据并组织各个窗口之间的通信(通过委托)。 但是,由于通过一个或两个代表不是问题,所以我开始考虑如果我的其他窗口需要10个代表才能与主窗口正确交互该怎么办? 代表是好的解决方案吗? 如何以良好的方式传递它们-通过构造函数,属性? 还是可能需要使用这么多的代表本身就是一些严重的设计缺陷?

您需要通过控制器从视图中拆分模型。 放置一个既可以具有表单引用又可以管理共享信息的对象。

另一种解决方案是将formX的引用发送到formY,以便他们可以进行通信。

我们使用使用主题/观察者模式的定制构建的表单管理器。

将打开的每个表单都报告给FormsManager,FromsManager使自己成为表单的观察者。

它还使表单成为FormsManager的观察者。

因此,您最终要遵守FormsManager的每个表单,而遵守每种表单的FormsManager都要结束。 然后,每个表单都可以通过FormsManager与任何其他表单进行通信,而每个表单不必知道所有其他表单。

如果只需要与主窗口进行交互,为什么不在其他构造函数中引用主窗口呢?

public class MainForm : Form
{
}

public class OtherForm : Form
{
    protected MainForm MainForm { get; set; }

    public OtherForm(MainForm mainForm) : base()
    {
        this.MainForm = mainForm;
    }
}

编辑:

简单有效。

如果您的表单需要与应用程序的所有其他表单进行交互,则服务定位器类型模式可能更适合。

以前使用MFC,有些东西会通知所有窗口。 您将传递带有参数的事件ID。

您可以对一个委托执行类似的操作,该委托将公开一个事件ID和一组参数。

这样做的最大好处是Windows只需实现一个网关即可。

您可以使用单个委托,使用自定义EventArgs传递多个信息,例如:通知类型,其他参数等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM