几乎所有人编写的Windows Forms程序都是直接采用Visual Studio的窗体设计器继承一个窗体,再加以设计。虽然可视化很方便而且广为使用,但是在项目中添加一大堆窗体类真的有必要吗?有些窗体很简单而且只使用一次,也需要为此创建一个新的类型吗?

不知道有没有人像这样写窗体:不继承Form类,而是修饰Form类,直接在Form类的实例上添加控件,然后显示。如下面这个例子(稍微用了一下C#2.0的语法):

Form f1 = new Form();
f1.Size = new Size(400, 300);
f1.Location = new Point(200, 200);
f1.Text = "New Decorated Form";

Button b1 = new Button();
b1.Text = "&Say Hello";
b1.Size = new Size(100, 30);
b1.Location = new Point(60, 50);
b1.Click += delegate
{
    MessageBox.Show("Hello, World");
};

f1.Controls.Add(b1);
f1.Show();

将这段代码放到Main里面就能生成一个完整的应用程序,不但按钮的事件可以通过这种方式响应,Form的事件,如Load或Paint也可以这样使用。

我觉得修饰From的方法在有些简单应用里比继承Form的方法更好,它不会产生新的类型,还可以在当前类型中处理新窗体的控件和事件,这给窗体间的数据交换带来了很大方便。