2008-11-24 46 views
2

爲什麼設計器不工作,如果你從自己寫的genericform繼承?WindowsForms設計器和GenericForm

假設我有以下genericform

public class GenericForm<T> : System.Windows.Forms.Form 
{ 
    public T Test 
    { 
     get; 
     set; 
    } 
} 

當我去設計我得到的錯誤。

我編寫的唯一解決方法是使用編譯器指令。

#if DESIGN  
    public partial class Form1 : System.Windows.Forms.Form 
#else 
    public partial class Form1 : GenericForm<string> 
#endif 

    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 

回答

2

我認爲這是因爲設計器試圖實例化窗體(或UserControl)以在設計器中託管它。如果你有一個通用的(或抽象的)表單,設計者就不能實例化它。

2

不幸的是,設計師有這樣的各種「陷阱」。在某個地方可能有一個很好的總結,但我從來沒有充分捲入它,使其成爲必要。

但是,我遇到了這個特殊的問題,除了應用於用戶控件。我提出的解決方案(這又是相當不好的,但以不同的方式)是從通用類派生出一個具體的類。在你的情況,你會怎麼做:

public class StringForm : GenericForm<string> 

然後,您應該能夠在設計使用StringForm沒有任何問題。

+0

有道理。你也會遇到與抽象類相同的問題:(。 – 2008-11-24 12:52:39

+0

Downvoters:請添加解釋性評論 – 2009-05-19 05:15:32