Создание динамических элементов управления - PullRequest
1 голос
/ 14 февраля 2011
        int i = amount; //amount will always start at 0
        int j = i + 1;

        GroupBox[] verGroup;
        verGroup = new GroupBox[i];

        verGroup[i].Name = "verGroup" + i.ToString();
        verGroup[i].Width = 400;
        verGroup[i].Height = 120;
        verGroup[i].Left = 5;
        verGroup[i].Top = 5 + (verGroup[i].Height * i) + (10 * i);
        verGroup[i].Text = "Verification #" + j.ToString();

        pnlVer.Controls.Add(verGroup[i]);

Это дает мне исключение IndexOutofRangeException в verGroup [i] .Name.Но индекс равен 0, что, безусловно, то, что он хочет?

Я также пытался

 verGroup = new GroupBox[5]  

, но это выдает ошибку «Ссылка на объект не установлена ​​на экземпляр объекта».

Буду признателен, если кто-нибудь укажет мне правильное направление.

Ответы [ 4 ]

5 голосов
/ 14 февраля 2011

Так как сумма начинается с 0, и вы создаете массив размера i, вы создаете массив размера 0. Поэтому вы не можете индексировать что-либо в массиве, поскольку он имеет длину 0.

вторая ошибка в том, что вы не инициализируете групповое поле. Вам нужно сказать verGroup [i] = new GroupBox (); инициализировать это.

0 голосов
/ 14 февраля 2011
    int i = amount; //amount will always start at 0
    int j = i + 1;

    GroupBox[] verGroup;
    verGroup = new GroupBox[i];
    verGroup[i] = new GroupBox();

    verGroup[i].Name = "verGroup" + i.ToString();
    verGroup[i].Width = 400;
    verGroup[i].Height = 120;
    verGroup[i].Left = 5;
    verGroup[i].Top = 5 + (verGroup[i].Height * i) + (10 * i);
    verGroup[i].Text = "Verification #" + j.ToString();

    pnlVer.Controls.Add(verGroup[i]);

у вас должна быть веская причина для создания массива

0 голосов
/ 14 февраля 2011

Ваш код довольно поврежден, вам нужно создать массив только один раз. тогда вам нужно создать экземпляр каждого элемента в массиве.

verGroup[] = new GroupBox[amount];
for (int i = 0; i < amount; i++)
{
    verGroup[i] = new GroupBox();
    //set values and add to controls
}
0 голосов
/ 14 февраля 2011

Во-первых, вы выделяете массив GroupBox здесь:

GroupBox[] verGroup;
verGroup = new GroupBox[i];

Однако это не распределяет значения GroupBox в массиве. Это нужно будет обрабатывать отдельно:

GroupBox[] verGroup;
verGroup = new GroupBox[i];
for(int gb = 0; gb < i; ++gb)
   verGroup[gb] = new GroupBox(); // This creates the individual group box elements

Кроме того, если i равно 0, вы говорите, что создаете нулевые групповые блоки, затем пытаетесь получить доступ к первому (verGroup[0] является 1-м элементом), что не удастся. Вам, вероятно, нужно сделать:

GroupBox[] verGroup;
verGroup = new GroupBox[i+1];
for(int gb = 0; gb < verGroup.Length; ++gb)
   verGroup[gb] = new GroupBox(); // This creates the individual group box elements
...