2010-02-09 13 views
3

我想在運行時創建一個.NET窗體,爲其添加按鈕和其他控件(也在運行時),然後能夠從該窗體生成something.designer.cs文件(然後可以將其添加到C#解決方案並編譯)。如何將.NET控件序列化爲CODE?

我想要做的事與WinForm設計器非常相似。但是我沒有爲用戶提供拖放界面,而是想在運行時自己動態構建表單/控件。

我在想我可以重用WinForm設計師正在做的事情。

這可能嗎?

+4

由於這個問題,我的大腦正在遭受遞歸 – 2010-02-09 21:43:14

+3

目前尚不清楚你想要什麼。試着給出一個具體的例子,說明你如何看待這個工作。 – 2010-02-09 21:46:35

+0

他想要一個運行時類型並讓它打出Form1 = new Form(); form1.Width = 800; form1.Height = 600; – 2010-02-09 21:51:52

回答

7

這個MSDN magazine article應該有你需要的一切。

+1

完美「不要重新發明輪子」的答案;) – 2010-02-09 22:15:29

0

它確實不像預先.NET那麼簡單,因爲在Visual Studio中看到的窗體的可視化版本實際上是多個文件的結果。

但在最簡單的形式,你可以簡單地只是反映.NET確實在創造一種新的形式開始的:

  1. 創建三個文件Form.cs,Form.Designer.cs和Form.resx(這是一個XML文件)。
  2. 置身其中相同的默認內容VS沒有
  3. 模仿添加控件,後臺代碼和資源

時,這將是一個繁瑣的任務,但它可以做到生成的代碼。然而增加資源將是繁重的。

0

是的,如果您知道構建正確的MSIL,您可以使用Compiler Services(編譯C#代碼)或Emit類來實現此目的。

+0

這是直接的答案。但我覺得你問的問題是在解決我不知道的另一個問題的途中遇到障礙。 – 2010-02-09 22:36:04

+0

我想你有理由重新發明車輪。 – 2010-02-09 22:36:27

+0

另外,您可以考慮將UI控件的圖形序列化爲自定義格式,並在運行時重新創建它。 – 2010-02-09 22:37:16