2017-01-06 38 views
0

所以我試圖通過我的代碼反覆創建相同的控件(在這種情況下面板)。 PNL_1_(面板序號):我可以利用這段代碼如何使用代碼生成多個控件

int i; 
    int PNL_1_Loc = -70; 

    private void CreateControls() 
    { 
     Panel PNL_1 = new Panel(); 

     i = i + 1; 

     PNL_1_Loc= PNL_1_Loc+ 70; 
     PNL_1.Location = new Point(0, PNL_1_Loc); 
     PNL_1.Name = "PNL_1_" + i.ToString(); 

     PNL_1.Width = 1052; 
     PNL_1.Height = 60; 
     PNL_1.BackColor = Color.FromArgb(222, 222, 222); 
    } 

我每次調用此函數它創建了一個名爲面板做到這一點。問題是我想在創建函數之外訪問PNL_1變量。

我試圖通過將PNL_1變量放在函數之外來解決此問題。這根本不起作用。它可以創建一個面板,但是當我第二次按下按鈕時,它會刪除第一個面板並創建第二個面板。這是一個問題,因爲我想保留第一個面板。我該怎麼做呢?

+0

每個新的面板添加到[**'列表'**](https://msdn.microsoft.com/en-us/library/6sh2ey19(V = vs.110 )的.aspx)。 –

回答

1

只需在Method外部創建一個公共列表,並將該列表的末尾添加到該列表中。您將始終可以訪問您創建的所有面板。

public List<Panel> ExistingSelfMadePanel { get; set;} 

private void CreateControls() 
{ 
    //your code 
    this.ExistingSelfMadePanel.Add(PNL_1); 
} 

編輯:我不知道你有多遠這樣的屬性,但不要忘記初始化列表!

this.ExistinSelfMadePanel = new List<Panel>();

否則你會得到一個空引用異常。剛進入我的腦海。 :)

編輯II:

下面是MSDN對泛型列表 「小」 Documentation。將會顯示如何存儲和訪問存儲在其中的項目。仔細閱讀,你將能夠訪問你想要的面板。另外,我認爲你讓我們錯了。要操縱現有面板,請在列表的幫助下加載想要的面板。是這樣的:

foreach (Panel tmpPanel in Form1.ActiveForm.Controls) 
{ 
    if(tmpPanel.Name == this.ExistingSelfMadePanel.FirstOrDefault(p => p.Name == "PNL_1").Name) 
    { 
    tmpPanel.ForeColor = Color.Aquamarine; 
    break; 
    } 
} 
+0

添加一個項目時,應該使用Add()而不是AddRange()。 –

+0

@VisualVincent是的,真的。但不知何故,如果我這樣做不會調試......奇怪。編輯:Sry基因你是對的:) – Cataklysim

+0

我得到一個錯誤,當我試試這個:嚴重\t代碼\t說明\t項目\t文件\t線\t抑制狀態 錯誤\t CS1503 \t參數1:無法從「System.Windows.Forms的轉換。 Panel'到'System.Collections.Generic.IEnumerable '\t toDoPlanner \t E:\ Projects \ Apps \ toDoPlanner \ toDoPlanner \ Form1.cs Active – unknown