Eddie Sheffield
作为微软之外的第一个发现启用
Form Designer
的人,确实是了不起
。
几年过后的今天,已经可以 找到一些关于Form Designer的资料,虽然不多也不全面,但毕竟还是有一些。我手上的资料是:
1 、《 Dissecting a C# Application Inside SharpDevelop 》中文版,第 16 章专门讲 Form 设计器;
2 、 windowsforms.net 上下载的一个小例子,显然也是从 SharpDevelop 得到的思路;
3 、 WinRes 这个工具,随 VS2005/.net FrameWork2.0 带的一个资源本地化的工具。可以反编译看看它的源码。
几年过后的今天,已经可以 找到一些关于Form Designer的资料,虽然不多也不全面,但毕竟还是有一些。我手上的资料是:
1 、《 Dissecting a C# Application Inside SharpDevelop 》中文版,第 16 章专门讲 Form 设计器;
2 、 windowsforms.net 上下载的一个小例子,显然也是从 SharpDevelop 得到的思路;
3 、 WinRes 这个工具,随 VS2005/.net FrameWork2.0 带的一个资源本地化的工具。可以反编译看看它的源码。
对比1、2与3, 我发现两者虽然都实现了Form Designer,但设计思路迥然不同,显然WinRes用的办法要简明。原因是.net 2.0增强了设计器的功能并简化了设计器的调用方法。由于时间限制,短期内写一个功能完善的Form设计器可能难。我想做的是做一些测试,得出基于.net 2.0写一个Form设计器的基本方法。
我想先写一个没有任何功能但能看到设计器样式的小例子来测试。以后再慢慢增加设计的功能,比如控件的添加删除,属性的设置,保存文件等功能。
我们的步骤如下:
在VS2005中(我用的版本是RC)新建一个C# WindowsForm方案, 在工程的引用中增加System. Design, 在Form1的代码中先添加
using
System.ComponentModel.Design;
然后双击Form, 在Form的Load事件中写以下代码:
DesignSurface surface
=
new
DesignSurface();
surface.BeginLoad( typeof (Form));
Control view = (Control)surface.View;
view.Dock = DockStyle.Fill;
this .Controls.Add(view);
surface.BeginLoad( typeof (Form));
Control view = (Control)surface.View;
view.Dock = DockStyle.Fill;
this .Controls.Add(view);
然后运行方案,这是最简单也没任何用处的窗体设计器了,但至少我们能调整那个被设计Form的大小:)