创建动态控件

时间:2011-02-14 17:25:11

标签: c# dynamic controls

        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]);

它在verGroup [i] .Name中给了我一个IndexOutofRangeException。但索引是0,这肯定是它想要的?

我也试过

 verGroup = new GroupBox[5]  

但是抛出“对象引用未设置为对象的实例”错误。

如果有人能指出我正确的方向,将不胜感激。

4 个答案:

答案 0 :(得分:5)

由于amount从0开始,并且您创建了一个大小为i的数组,因此您创建的是一个大小为0的数组。因此,您无法索引数组中的任何内容,因为它的长度为0.

第二个错误是因为您没有初始化组框。你需要说verGroup [i] = new GroupBox();初始化它。

答案 1 :(得分:0)

首先,你在这里分配一个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]是第一个元素),这将失败。您可能需要这样做:

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

答案 2 :(得分:0)

您的代码非常破碎,您只需要创建一次数组。那么你需要实例化数组中的每个项目。

verGroup[] = new GroupBox[amount];
for (int i = 0; i < amount; i++)
{
    verGroup[i] = new GroupBox();
    //set values and add to controls
}

答案 3 :(得分:0)

    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]);

你必须有充分的理由说明你为什么要创建一个数组