2014-02-23 41 views
-2

我想要創建一個循環來添加組合框和標籤到窗體。凱德我已創建的他們,但我如何訪問它們從在循環內創建控件(組合框等)

while (i < 3) 
{ 
    cboTwinRoom = new ComboBox(); 
    cboTwinRoom.FormattingEnabled = true; 
    cboTwinRoom.Location = new System.Drawing.Point(446, 218 + spacer); 
    cboTwinRoom.Name = "name" + i; 
    cboTwinRoom.Items.AddRange(new object[] { 
    "1", 
    "2", 
    "3", 
    "4", 
    "5", 
    "6", 
    "7", 
    "8", 
    "9"}); 
    cboTwinRoom.Size = new System.Drawing.Size(45, 21); 
    cboTwinRoom.TabIndex = 3; 
    grpAvailability.Controls.Add(cboTwinRoom); 
    i++; 
    spacer = spacer + 50; 
} 

我一直在使用數組來設置ComboBox的名字tryed的comboboxs得到vlues但我得到一個錯誤。如果任何人都可以幫助,我會很棒。在此先感謝

錯誤:名爲'名稱'的局部變量不能在此範圍內聲明,因爲它會給'名稱',它已在'父'或當前'範圍中用於表示別的

+1

此代碼不起作用?你在說什麼錯誤? –

+0

我在代碼中沒有看到任何「名稱」.. –

+0

我在問我如何訪問每個組合框的選定值?錯誤是當我嘗試使用數組來設置組合框的名稱。 –

回答

0

行cboTwinRoom.Name =「名稱」+我不應該工作。你不能連接一個字符串到一個int。 使用「名稱」+ i.ToString()

0

嘗試將組合框存儲爲類級變量。

首先定義是:

private List<ComboBox> comboBoxes; 

那麼你的代碼看起來是這樣的:

Func<int, ComboBox> createComboBox = i => 
{ 
    cb = new ComboBox(); 
    cb.FormattingEnabled = true; 
    cb.Location = new Point(446, 218 + i * 50); 
    cb.Name = "name" + i; 
    cb.Items.AddRange(new object[] 
    { 
     "1", "2", "3", "4", "5", "6", "7", "8", "9" 
    }); 
    cb.Size = new Size(45, 21); 
    cb.TabIndex = 3; 
    return cb; 
}; 

comboBoxes = 
    Enumerable 
     .Range(0, 3) 
     .Select(n => createComboBox(n)) 
     .ToList(); 

comboBoxes 
    .ForEach(cb => 
     grpAvailability.Controls.Add(cb)); 

我已經分離出每個代碼的部分來,希望可以很容易地看看每個部分在做什麼。