日期:2014-05-17  浏览次数:20733 次

向Form添加控件的一点点疑惑。。。。
继承Form添加控件的时候,为什么需要把控件做为成员变量。
MainForm:Form
利用designer拖入一个名为ConfirmButton的Button.

代码生成如下。

{
private **.Button ConfirmButton;
this.ConfirmButton=new Button();
        ......
this.Controls.add(this.ConfirmButton);



}
我的问题是既然Controls已经聚合了ConfirmButton,ConfirmButton会成为Controls的成员变量,就没有必要吧ConfirmButton作为MainForm的成员变量了。

因为成员变量从语义上来说这里始终表示两个类聚合关系。
这样岂不是MainForm聚合Button.和Controls。 同时Controls有聚合了ConfirmButto
控件 聚合 Form

------解决方案--------------------
what.....
------解决方案--------------------
为了访问方便。

事实上如果你不用设计器,直接这么写也是可以的:
class MyForm : Form
{
    public MyForm() { Controls.Add(new Button()); }
}
------解决方案--------------------
我都不知道LZ你想问些什么···
------解决方案--------------------
唉晕死!

vs有一种很傻的工具(实际上别的许多所谓的软件工程工具也有),就是从代码直接产生类图。其实这是产生垃圾的!lz的做法也是。死抠代码,你一定产生一堆垃圾,从而让你得到的设计图非常纠结。

我们都是根据设计图来写严格地测试代码,但是从来不根据代码来死抠设计图。代码中一定有一大堆东西是在设计上不需要的,如果你以为代码中的东西一定等于设计上的内容,那么你就本末倒置了。

比如说我不但可以设计一个ConfirmButton变量,我还可以设计一个SpecialButton变量,也指向同一个对象,因为以前写的几百行代码使用这个变量而我不想修改代码了。那么我写代码时就知道不同变量指向的是同一个对象,而这个对象其实是通过加入Controls从而加入控件树的。

那么我设计时明明知道写2个、或者100个变量也是指同一个东西,你为什么偏偏死抠代码而要认为他们是“聚合”了不同的东西呢?

不要从代码死抠设计,那是本末倒置的。请扔掉编程语言的偏见,设计是先于编写代码的,而编写代码完全可以有无数超出设计的语句。