C# winform子窗体与子窗体传值解决思路
C# winform子窗体与子窗体传值
有一个父窗体Form1,它new出来了两个子窗体Form2与Form3. 请问Form2与Form3之间怎么传递数据。
Form2给Form3传递数据的时候,要判断form3有没有打开,打开了才传,不打开则不传。要求这个两个子窗体能随时传递数据。
现在想的是弄个类,保存form2要传递的数据,form3一直循环其中的数据,有则取出来。
请问还有没有更高明的办法?
------解决思路----------------------
任何胡乱进行的轮询都是编程大忌。(具体的问题就不展开说了)
你的 Form2和 Form3 是相互不依赖的,因此再设计对象的关系时,它们也毫不相关。因此Form2不可能给 Form3 传数据(软件设计人员不要把自己的设计降低到简单地重复用户的话的程度,你需要真正优化设计)
Form2应该通过事件来告诉自己的宿主对象“我有数据改变了”。这样,你的Form1就能捕获这个事件,并且处理数据传输。例如代码
所示的,你的 Form1 才具有这个这个职责,这样才能完成需求中“有时候有 Form2没有 Form3,有时候有 Form3没有Form2”等等情况。 Form2 和 Form3 完全是独立自主的对象,根本不能承担这个数据传输的职责,它是 Form1的职责。
能分配职责,是面向对象程序设计的关键。
------解决思路----------------------
从这里的设计就能看出接口要求,你的 Form2需要有一个自定义的事件来通知任何宿主“有数据改变”,同时要实现一个 GetDatas 函数;而你的 Form3 要实现一个 SetDatas 方法。
在许多小软件公司中,我们经常能够看到那样一种水平很低的项目经理,他们可能是凭着关系上位的,他们只会非常“忠心”地去重复老板和用户的话,美其名曰“需求”,而不会做出软件架构设计。他们把客户的原话和老板的原话,作为给程序员“压任务”的砝码,而他们自己本人不会搞稍微复杂一点的设计和开发。
简单地重复“需求”是很低级的设计,甚至根本不算是软件设计开发。要运用一定的设计原则,例如“绝不会这样去轮询”,这样久而久之产生了质变,你才明白什么是软件设计。
有一个父窗体Form1,它new出来了两个子窗体Form2与Form3. 请问Form2与Form3之间怎么传递数据。
Form2给Form3传递数据的时候,要判断form3有没有打开,打开了才传,不打开则不传。要求这个两个子窗体能随时传递数据。
现在想的是弄个类,保存form2要传递的数据,form3一直循环其中的数据,有则取出来。
请问还有没有更高明的办法?
------解决思路----------------------
任何胡乱进行的轮询都是编程大忌。(具体的问题就不展开说了)
你的 Form2和 Form3 是相互不依赖的,因此再设计对象的关系时,它们也毫不相关。因此Form2不可能给 Form3 传数据(软件设计人员不要把自己的设计降低到简单地重复用户的话的程度,你需要真正优化设计)
Form2应该通过事件来告诉自己的宿主对象“我有数据改变了”。这样,你的Form1就能捕获这个事件,并且处理数据传输。例如代码
var f2 = new Form2();
var f3 = new Form3();
f2.DataChanged += (s,e)=>
{
var ds = f2.GetDatas();
f3.SetDatas(ds);
};
f2.Show();
f3.Show();
所示的,你的 Form1 才具有这个这个职责,这样才能完成需求中“有时候有 Form2没有 Form3,有时候有 Form3没有Form2”等等情况。 Form2 和 Form3 完全是独立自主的对象,根本不能承担这个数据传输的职责,它是 Form1的职责。
能分配职责,是面向对象程序设计的关键。
------解决思路----------------------
从这里的设计就能看出接口要求,你的 Form2需要有一个自定义的事件来通知任何宿主“有数据改变”,同时要实现一个 GetDatas 函数;而你的 Form3 要实现一个 SetDatas 方法。
在许多小软件公司中,我们经常能够看到那样一种水平很低的项目经理,他们可能是凭着关系上位的,他们只会非常“忠心”地去重复老板和用户的话,美其名曰“需求”,而不会做出软件架构设计。他们把客户的原话和老板的原话,作为给程序员“压任务”的砝码,而他们自己本人不会搞稍微复杂一点的设计和开发。
简单地重复“需求”是很低级的设计,甚至根本不算是软件设计开发。要运用一定的设计原则,例如“绝不会这样去轮询”,这样久而久之产生了质变,你才明白什么是软件设计。