2009-10-16 95 views
-1

我有一个回调,因为我的Form1中打开窗体2,这回信息,以另一种形式后,将数据发送到一个窗体2 ... prioblem请帮C#回调问题

我可以从Form1的发送对象到窗体2,但form2方法的结果必须通过回调返回到另一个表单(例如表单3)。

我希望你明白我的问题..

+0

它很难告诉你想要什么。你能发布一些代码并发现问题吗? – 2009-10-16 15:09:46

+2

多一点信息会很好...你有问题吗,或者你只需​​要知道如何做到这一点? – Bobby 2009-10-16 15:10:07

+0

你可以发布代码示例吗?你是否将数据从Form2发送回Form1,反之亦然,或者两者兼而有之,或者是完全向另一种形式发送数据? – Donut 2009-10-16 15:10:07

回答

1

事实上,您有多个表单操作相同的数据意味着更好的选择是将数据封装在一组“模型”类中,这些类可以处理将信息发布到表单并持久化存储的任何更改有必要的。

这样做的好处是当您有多个需要处理相同数据的表单时,您可以在模型对象上发布回调以进行更改通知。每个表单都订阅它关心的模型中的事件,这意味着任意数量的表单都可以操纵您的模型,并且所有表单都可以通过响应通知来维护当前状态。

什么时候这样做,你不关心哪些表单正在操作数据,并且在启动新表单时不需要传递比模型类更多的东西。同样,当表单请求保存时,所有表单都可以更新状态,以便它们不显示待处理的更改。

0

当通过多种形式之间的数据,其经常有用到存储refernceto其他形式表单中私有变量,只有通过形式的构造函数填充。

但是,请注意,这可能会导致内存问题,尤其是事件仍然与其他表单上的表单连接。

+0

如果表单方法在不同的线程中运行,您可能还会遇到锁定和同步问题。 – 2009-10-16 16:05:38

0

您可能可以让Form3侦听来自Form2的FormClosed事件,然后有一些代码要求从Form2返回数据。或者,您可以在Form2中创建和事件FormClosedWithReturnValue(对象发件人,SomeArgsThatContainsReturnData数据),并让Form3监听该事件。希望有所帮助。