2010-04-14 166 views
0
public Form1 f1 = new Form1(); 
int p = 150; 
int q = 100; 

public void add() 
{ 
    //CheckBox c = new CheckBox(); 
    //c.Location = new Point(p, q); 

    //c.Text = f1.sub[0]; 
    //this.Controls.Add(c); 

    CheckBox chkBox = new CheckBox(); 
    chkBox.Location = new Point(p, q); 
    chkBox.Text = "Checked"; 
    chkBox.Checked = false; 
    chkBox.CheckState = CheckState.Checked; 
    chkBox.CheckedChanged += new EventHandler(chkBox_CheckedChanged);// 
    this.Controls.Add(chkBox); 
    chkBox.Text = f1.sub[1];//The problem is here... whatever value I supply 
          // to sub[] it gives the below mentioned error 
} 

索引超出範圍。必須是非負數且小於集合的大小。 參數名:指數動態添加複選框

這裏sub[]是在Form1其中有5個值list<string> ...

回答

1

那麼它似乎在一次訪問子集,它是空的。在執行這一行之前:chkBox.Text = f1.sub[1];看看你在集合中有什麼。

1

也許「官方」Form1(你在屏幕上看到的那個)有一個帶有5個值的「sub」,但新創建的Form1(來自f1變量)是否也有5個值?該errormessage的說沒有......

編輯
如果你調用從Form1的實例add()方法,再經過this作爲參數傳遞給方法,而不是創建一個new Form1()的。

+0

然後我應該爲此做些什麼? – Shiv 2010-04-14 08:09:23

+0

我編輯了我的答案。 – 2010-04-14 09:50:04

+0

對不起,但我沒有得到你...... – Shiv 2010-04-14 11:01:48

0

很明顯,在sub的索引位置1沒有任何東西。

chkBox.Text = f1.sub[1]; 

列表sub數據的長度小於2

如果你說,它包含5個元素,然後確保引用該對象仍然是有效的。我覺得你沒有從你想要的列表中獲取數據,但可能是空的。簡而言之,sub並不指向您認爲它的列表。

提示:儘量避免對代碼中的值進行硬編碼。以編程方式查找索引並使用它。示例(只是演示):

chkBox.Text = f1.sub[f1.sub.Count - 1];