窗口之间的相互作用

时间:2008-11-12 13:10:23

标签: c# delegates

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

5 个答案:

答案 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类型,其他参数等。

相关问题