Добавление флажка динамически - PullRequest
0 голосов
/ 14 апреля 2010
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[] - это list<string> в форме1, которая имеет 5 значений ...

Ответы [ 3 ]

1 голос
/ 14 апреля 2010

Может быть, «официальная» форма Form1 (та, которую вы видите на экране) имеет «sub» с 5 значениями, но имеет ли вновь созданная Form1 (из переменной f1) также 5 значений? Сообщение об ошибке говорит нет ...

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

1 голос
/ 14 апреля 2010

Что ж, похоже, что во время доступа к вложенной коллекции она пуста. Перед выполнением этой строки: chkBox.Text = f1.sub[1]; посмотрите, что у вас есть в коллекции.

0 голосов
/ 14 апреля 2010

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

chkBox.Text = f1.sub[1];

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

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

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

chkBox.Text = f1.sub[f1.sub.Count - 1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...