2010-04-14 5 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 (тот, который вы видите на экране) имеет «sub» с 5 значениями, но имеет ли только что созданный Form1 (из переменной f1) также 5 значений? ErrorMessage говорит нет ...

EDIT
Если вы называете это add() метод от экземпляра Form1, а затем передать this в качестве параметра метода вместо создания new Form1().

+0

то ват должен ли я для этого? – Shiv

+0

Я отредактировал свой ответ. –

+0

Извините, но я не получил u .... – Shiv

0

Очевидно, что в индексной позиции 1 в подпункте ничего нет.

chkBox.Text = f1.sub[1]; 

Длина данных в списке sub меньше 2.

Если вы говорите, что он содержит 5 элементов, то убедитесь, что ссылка на этот объект остается в силе. Я чувствую, что вы не получаете данные из списка, который вы хотели, а скорее пустым, наверное. Короче говоря, sub не указывает на список, который по вашему мнению является.

Совет. Избегайте жесткого кодирования значений в коде как можно больше. Найдите индекс программно и используйте его. Пример (просто демонстрация):

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