在多窗口编程中。各个窗口之间的数据传递是件伤神的事情,我以前用的最多的是在一个窗口建立一个公共字段,或创一个公共函数,将窗口的实例传递到下一个窗口,在另外一个窗口中可以对这个公共字段和公共函数进行操作,这样子的实现能满足大部的需求。例如在一个有进度条的操作中,我可以在子窗口中暴露一个对进度条操作的只写属性,每次父窗口改写进度值子窗口都用这个值去更新进度条,实现进度百分比的效果。
  今天在吕老师的Blog上看到了一个新的实现方法。以前的实现方法都是窗口与窗口之间的交换。结合的比较紧密,如果涉及的窗口比较多的话。一方发生更改。那涉及的代码量就比较大了。他的思路是在窗体与窗体之间增加一个中介。这样让窗体间的结合度降低,一旦需求改变,只需要改变中介了。达到了偷懒的目的。中介类的代码如下:
 

Vs2003多窗口下的复杂数据传递using System;
Vs2003多窗口下的复杂数据传递
Vs2003多窗口下的复杂数据传递
namespace Test

这里面定义了一个委托和一个事件,还有两个事件,我们就是通过这个委托和事件达到数据传递的目的的。
Vs2003多窗口下的复杂数据传递
这是建立的父窗口,
Vs2003多窗口下的复杂数据传递
这是建立的子窗口,我们就在这里改变一些值,然后这些改动会在父窗口中自动的反映出来。

这是父窗口的实现代码

Vs2003多窗口下的复杂数据传递  Result r=new Result();
Vs2003多窗口下的复杂数据传递        
private void button1_Click(object sender, System.EventArgs e)
        }

这代码里我们建立一个对象Result,并给事件订阅了处理程序,然后将Result对象的实例传给了Form2.在Fom2中我们需要重与构造函数,以获得对Result的引用。
 1Vs2003多窗口下的复杂数据传递private Result R;
 2Vs2003多窗口下的复杂数据传递        public Form2(Result r):this()
 3        }
这里触发了事件。最终结果将在父窗口中反应出来。运行结果:
Vs2003多窗口下的复杂数据传递

相关文章:

  • 2022-02-01
  • 2021-07-24
  • 2022-12-23
  • 2021-08-04
  • 2022-12-23
  • 2021-10-12
  • 2022-12-23
猜你喜欢
  • 2021-08-30
  • 2022-02-28
  • 2021-08-22
  • 2021-06-23
  • 2021-04-05
  • 2022-12-23
相关资源
相似解决方案