2015-10-23 106 views
1

當我添加一個泛型類型在C#中的形式,我得到這樣加入仿製藥形成

的InitializeComponent錯誤並不在當前的背景下

與同爲我所有的組件存在。

下面是代碼:

public partial class Form1<T> : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
} 
+5

請澄清一下:爲什麼要添加一個泛型類型到您的表單? –

+0

我想知道你想在哪裏使用T –

回答

0

InitializeComponent()是Visual工作室用於使用可視化設計創建的形式自動生成的方法。該方法位於your_form_name.Designer.cs類中,該類是窗體的「可視化」部分,其中控件放置在窗體上。

也許你剛剛從這種方式創建的另一個表單複製粘貼它。如果您的自定義類在您的解決方案中沒有類似Form1.Designer.cs類的「可視化」部分 - 那麼只需從構造函數中刪除此方法調用即可。否則,請確保您的「視覺」類部件具有此方法。

+0

是的,我的類有一個可視化組件,我只是想將一個通用參數傳遞給一個自動生成的窗體。 – Virus7711

3

首先,Form1部分類,它存在於多個文件中。

由於您將Form1.cs文件更改爲具有通用的Form1<T>,因此還需要將相應的Form1.Designer.cs文件更改爲具有泛型類。

否則,C#編譯器會將這兩個文件視爲包含兩個不同的類,一個是Form1<T>和一個Form1。雖然他們在技術上具有相同的名稱,但它們是截然不同的。您可以同時聲明具有相同名稱的泛型類型和非泛型類型。

所以改變這兩個文件。


現在,說了那麼,你不能有通用的形式。當您成功獲得編譯器編譯代碼(通過上述更改)時,您會發現Visual Studio中的表單設計器不再滿意您,並且無法直觀地設計該表單。

正如在這個答案的評論中提到的,如果你可以沒有表單設計師的生活,那麼這不會是一個showstopper。

但是,如果你不能沒有視覺表單設計師,那麼這是無法修復的,除非要刪除首先添加的Form1的通用參數。

所以你應該嘗試找到一種不同的方式去做你想做的事。

+1

我想如果OP很高興不要使用Visual Studio設計器,那麼在使用通用表單時就不存在真正的問題。我不會建議在沒有設計師的情況下嘗試處理表單的gui,但 – Sayse

+1

我同意,我已經編輯了該效果的答案。 –