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 帶的一個資源本地化的工具。可以反編譯看看它的源碼。
對比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);
然後運行方案,這是最簡單也沒任何用處的表單設計器了,但至少我們能調整那個被設計Form的大小