2017-08-05 300 views
0

我有以下自定義窗體(MyFrm)從窗體繼承。無法加載C#基類MyFrm

public class MyFrm<T>: Form where T: class 
{ 
} 

而以下是我的Form1中:

public partial class Form1: MyFrm<CONTACTS_BASE> 
{ 

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

    public void MyInitialize() 
    { 
    }      
} 

可以看出,沒有什麼特殊的,但是,當點擊右鍵並選擇視圖設計器,我得到以下錯誤:

設計者不能顯示這個文件,因爲它裏面的任何類都不能設計。設計人員檢查了文件中的以下類: Form1 ---無法加載基類「MyGym.Controls.MyFrm」。確保組件已被引用,並且所有項目都已建好。

當我刪除下面的部分並相應地編輯我的Form1時,當我進入設計器模式時我沒有任何錯誤。 :Form T:class

爲什麼我要面對這個問題?有沒有解決這個問題? 謝謝

+0

可能的重複https://stackoverflow.com/questions/13345551/why-do-base-windows-forms-form-class-with-generic-types-stop-the-designer-loadin – ashin

+0

什麼版本VS你在用嗎?我只是嘗試了你在VS 2017中所描述的基本相同的事情,而且它似乎已經奏效。如果以前版本中的設計者在使用泛型基類顯示錶單時遇到問題,那麼他們似乎可能已經修復了它。 – jmcilhinney

+0

VS2013,我會嘗試你的修復=)謝謝 – Licentia

回答

0

我相信你需要明確提供InitializeComponent()方法,以便Visual Studio IDE(Designer)能夠正常工作。

public class MyFrm<T> : Form 
    where T : class 
{ 
    public MyFrm() : base() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 

    } 
} 

,然後鏈構造一起

public partial class Form1 : MyFrm<CONTACTS_BASE> 
{ 
    public Form1() : base() 
    { 
     InitializeComponent(); 
     MyInitialize(); 
    } 

    public void MyInitialize() 
    { 
    } 
} 

注意: base加入到構造函數。然而,在這個例子中,它有點矯枉過正,因爲基礎構造函數已經被隱式調用。由於answer,我提供了這個補充。它聲明你必須保留基類中的構造函數參數。