2008-11-12 52 views
2

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

+1

完全不是,这是关于在单个应用程序的窗口之间发送消息,我认为,不是进程间通信。 – Sekhat 2008-11-12 13:38:34

+0

啊,我的歉意。我会重新打开它。 – 2008-11-12 13:39:15

+0

@TalhaIrfan按要求删除。 – 2016-05-26 01:36:55

回答

3

需要由控制器来分割从视图中的模型。放置一个能够同时具有形式参照并且能够管理共享信息的对象。

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

0

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

public class MainForm : Form 
{ 
} 

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

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

编辑:

简单有效。

如果您的表单需要与应用程序的所有其他形式进行交互,那么service locator类型模式可能更适合。

0

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

你可以做一些类似的事情,一个委托会公开一个事件ID和一个参数集合。

这样做的最大优点是窗口只需要实现一个网关。

0

可以使用一个单一的代表,使用自定义的EventArgs通过几个信息,如:类型notificaton的,附加的参数等

1

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

每个被打开的窗体都被报告给FormsManager,FromsManager自己使窗体成为观察者。

它也使窗体观察者的FormsManager。

所以,你最终会看到每一个形式观察FormsManager和FormsManager观察每一个表单。然后每个表单可以通过FormsManager与任何其他表单进行通信,而不需要每个表单都知道所有其他表单。

相关问题