2011-10-05 106 views
1

我想在for循環中創建動態複選框。但我在編譯期間出現錯誤,但是當我運行create checkbox按鈕並運行該函數時。 你能告訴我我做錯了什麼嗎?c#動態複選框創建

public void CreateCheckBox (int i) 
     { 
       int y = 10; 
       CheckBox[] _cb = new CheckBox[i]; 
       String chkBox = "chkBox_"; 
       for (int n = 0; n<i; n++) 
        { 
         _cb[n].Location = new Point(10, y); 
         _cb[n].Name= chkBox + n.ToString(); 
         form1.Controls.Add(_cb[n]); 
         y+= 15; 
        } 
     } 

回答

6

在循環內部,您必須創建一個新的複選框實例。

for (int n = 0; n<i; n++) 
{ 
    _cb[n] = new CheckBox(); 
    _cb[n].Location = new Point(10, y); 
    _cb[n].Name= chkBox + n.ToString(); 
    form1.Controls.Add(_cb[n]); 
    y+= 15; 
} 
+0

謝謝巴拉我現在正在添加該行。有效!! –

+0

Bala如果我想刪除這些複選框,該怎麼辦?我怎麼能創建一個form1.Controls.Remove()的東西? –

+0

@ValNolav刪除,你可以做'Control cb = form1.FindControl(controlName); form1.Controls.Remove(cb);' –

0

當定義的Checkboxes一個Array,陣列內的對象被初始化爲null。您需要使用new Checkbox()創建複選框的實例。

在我看來,您不需要將它們保存到Checkbox[]中,因爲Form管理控件集合。所以,這段代碼可能更具可讀性:

public void CreateCheckBox (int max) 
{ 
    String name = "chkBox_"; 
    int y = 10; 
    for (int i = 0; n < max; i++) 
    { 
     Checkbox current = new Checkbox(); 
     current.Location = new Point(10, y); 
     current.Name= name + i.ToString(); 
     form1.Controls.Add(current); 
     y+= 15; 
    } 
} 
+0

我需要通過單擊同一行中的複選框來刪除一行中的文本框。我怎樣才能通過點擊一個按鈕? –

+0

我建議您將行索引存儲在checkbox.Tag中,然後在文本框中(使用+ =)監聽CheckedChanged事件,並在事件處理函數中從發件人的標記中獲取行索引。 –