2012-09-18 73 views
4

我在Visual Studio 2010(標題中的一個)中收到警告消息未找到'Track_Attack.TAGeneric'類型的構造函數。 C#Winforms

基本上我製作了一個通用表單,它有一堆變量,虛函數。

它需要一個I類作爲參數製成,並將其分配到一個局部變量(其然後將與使用getter和setter一個歡迎使用屬性)

我然後由另一種形式,其從這種形式繼承。一切都很好,它運行,但當我試圖看看它的設計者,我得到了錯誤信息。

public TAGeneric(TAManager iManager) 
    { 
     ControlHelper.SuspendDrawing(this); 

     mManager = iManager; 

     SetStyle(ControlStyles.OptimizedDoubleBuffer | 
      ControlStyles.UserPaint | 
      ControlStyles.AllPaintingInWmPaint, true); 

     InitializeComponent(); 
     SetupCommandBar(); 
     ControlHelper.ResumeDrawing(this); 
    } 

那就是父母。

public TAAddInterval(TAManager iManager) : base(iManager) 
    { 
     InitializeComponent(); 
    } 

這是一個孩子。忘記我在使用「經理人」的時候,我不喜歡這個事實。任何人都可以解釋這個問題?從字面上看,它可以很好地運行,但是當試圖在設計器中編輯圖形面時,它不會加載它。

感謝您的幫助。

+0

與您的問題無關,我建議您將類中的名稱「Generic」更改爲其他名稱,因爲[Generic](http://msdn.microsoft.com/en-us/library/ms172192.aspx)實際上意味着.Net中的一些東西。 –

+0

找到一個MS支持:https://support.microsoft.com/en-us/kb/893709 –

回答

8

我懷疑你需要提供一個無參數的構造函數爲設計師使用:

public TAAddInterval(TAManager iManager) : base(iManager) 
{ 
    InitializeComponent(); 
} 

[Obsolete("This constructor only exists for the benefit of the designer...")] 
public TAAddInterval() : this(null) 
{ 
} 

如果有如果設計師恰好被投擲某種假TAManager您可以提供代替,這可能避免NullReferenceException打一些使用經理的代碼。

+0

把話說出來! +1的Jon Skeet答案! –

+0

因此,我將第二個構造函數與原始的一起添加到我的子窗體中? – ICTech

+0

@ICTech:是的,正如我在答案中所顯示的那樣。 –

2

您可能只需要一個無參數的構造函數,設計器就可以正常工作。

+0

在我的父項或者孩子?或者兩者兼而有之? – ICTech

+1

好吧,對於設計者來說,每一個表單都需要有一個無參數的構造函數,即使這個構造函數只是從它的基類繼承而來,如果你把@JonSkeet在向下一層的示例中,您可以實現一個無參數的構造函數,然後從該基類繼承(構造函數)。 –

相關問題