对于大多数可视化的信息系统而言,经常遇到多个窗体交互的现象,其中又以子窗体和父窗体交互居多,刚刚做了一个项目,遇到了很多这种现象,又从网上收集了一些这方面的知识,现在总结一下,做个备份。

    信息系统无非是信息获取、后台处理、显示的过程。子窗体和父窗体的交互大多是显示的需要。如果把子窗体和父窗体作为两个对象的话,他们之间的相互操作有几个关键点要理清楚:操作对象和被操作对象;触发时点和触发事件;被操作对象的操作。这其中第二点最为关键,关于怎样触发事件、传递消息和接收消息有很多方法,这是我们要讨论的重点。父窗体操作子窗体是比较简单的,通常子窗体都是父窗体类的一个对象,父窗体想操作子窗体,只需要在触发事件中调用子窗体对象中已暴露的接口,想让子窗体做什么,只需要在接口中实现就可以了。

代码示例如下(VB.net,自动生成代码略去,以下同):


Code

下面重点说明子窗体如何操作父窗体的几种方法。

1.  将父窗体实例传递给子窗体作为自己的对象。这个方法等于把父窗体操作子窗体倒过来。但是父窗体一般承载的信息比较多,而且一般不止一个子窗体,这样做容易造成对象的混乱,而且影响类自己的封闭性,效率方面不知道有没有影响(笔者学识尚浅,请高人指教),但是总觉得不优雅,呵呵。


Code1

2.  将父窗体的控件对象传递给子窗体作为自己的对象。这个方法与1类似,优缺点也相似,但是影响的范围小,同时调用的范围也受限制,只能子窗体只能操作传递过来的对象。


Code2

3.  将父窗体或父窗体的控件传递给第三方对象,子窗体操作第三方对象。这个方法能够实现显示和逻辑处理的分离,类之间的调用关系虽然复杂了一层,但是线路更加清晰了。需要注意的是,这个时候需要父窗体把一部分传递给逻辑对象,再把逻辑对象也传递给子窗体。举个例子:老爷派一个仆人带着钱给少爷买东西,少爷想买啥,仆人就给买给他。这样,老爷就不用管了,但是仆人的权力就大了。而前面的方法全都是老爷和少爷之间的互动。


Code3

4.  通过第三方逻辑对象进行监控和通信。与3的方法相同部分是需要将逻辑对象传递给子窗体,不同的是需要把父窗体的方法与逻辑类的方法绑定,子窗体通过触发逻辑类的方法来触发父窗体的方法。还是刚才的例子,这次老爷发现仆人吃回扣,于是钱自己管,少爷想买什么,就让仆人告诉老爷,老爷自己买好了给少爷。此方法的好处就是父窗体只需要逻辑类做一个中间的通信兵,动作实现还是自己做,保持了类的封闭性。这个方法是同事提供的,我理解的还不是很深,大体结构如此。


Code4

4这个方法的基础上,我们想实现同一个父窗体下多个子窗体之间的调用和控制就方便多了,因为具体动作都是父窗体来实现的,子窗体只需要通过逻辑类传递一个消息就行了。比如说二少爷想让大少爷给他好吃的,大少爷不肯,那么二少爷和仆人都没辙,毕竟他们没有这个权力调动大少爷。但是二少爷让仆人告诉老爷,这事就好办了,老爷自然会让大少爷把东西给他弟弟并批评他:“你怎么不让着弟弟。”呵呵。

    这都是比较简单的方法,是目前笔者所掌握的。有什么更好的方法,欢迎大家交流。

 

posted on 2008-05-27 17:19  雷达  阅读(2882)  评论(0)    收藏  举报