2013-10-05 108 views
1

我想學習使用構造函數在兩個C#表單之間傳遞一個列表,如下所示。在第一種形式我做:在C#表單之間傳遞列表

List<Cat> myCatList; 
//list populating function... 
private void btnDisplay_Click(object sender, EventArgs e) 
{ 
    df = new DisplayForm(myCatList); 
    df.Show(); 
    this.Hide(); 
} 

在接下來的形式,我想接收數據,如下圖所示:

List<Cat> catList; 
public DisplayForm(List<Cat> catList) 
    { 
    InitializeComponent(); 
    this.catList = catList; 
    } 

但我總是得到一個錯誤的第二種形式的構造說:

錯誤1可訪問性不一致:參數類型 'System.Collections.Generic.List < _05_WindowsFormsAppCat.Cat>' 比方法更少可訪問的「_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List < _05_WindowsFormsAppCa t.Cat>)'

任何想法?

+3

顯示Cat的定義。我敢打賭,這不是「公共」 –

回答

3

你在哪裏申報Cat班?它必須公開訪問DisplayForm類。您可能需要將public關鍵字添加到其聲明中。

這被稱爲類型或成員的可訪問性。

這裏是不同層次和它們的默認值的參考:

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

我猜你Cat類型要麼是在其他組件(項目)作爲DisplayForm,在這種情況下,在默認情況下,該項目中的類不可見,或者您將其定義爲您的第一個Form類的嵌套類,它將使其成爲private並可在該表單的範圍內訪問。

8

List這部分是一個完整的紅鯡魚在這裏。如果您的構造函數具有Cat參數而不是List<Cat>參數,則會出現完全相同的問題。

您的Cat類型可能是內部的,因爲您尚未將其聲明爲public。因此,你不能在公共成員簽字,用它像這樣:

public DisplayForm(List<Cat> catList) 

選項:

  • Cat一個公共類
  • 讓您DisplayForm構造內部

就我個人而言,我儘可能保持私人和實用 - 儘管對於小型升項目它不會有太大的區別,特別是對於只有一個程序集的應用程序而言。大多數開發商傾向於在公佈所有內容方面犯錯,這是IMO的一個錯誤,但這是一個判斷呼籲。上述兩個選項都可以正常工作......但至少認爲是關於您是否想讓其他程序集知道Cat類型(或者確實希望其他程序集中的代碼是否能夠調用該構造函數) 。