动态添加复选框

时间:2010-04-14 07:59:07

标签: c# winforms

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
}

指数超出范围。必须是非负数且小于集合的大小。 参数名称:index

此处sub[]是form1中的list<string>,其中包含5个值...

3 个答案:

答案 0 :(得分:1)

好吧,在您访问子集合时,它似乎是空的。在执行此行之前:chkBox.Text = f1.sub[1];查看集合中的内容。

答案 1 :(得分:1)

也许“官方”Form1(你在屏幕上看到的那个)有一个带有5个值的“sub”,但新创建的Form1(来自f1变量)是否也有5个值?错误消息说没有......

修改
如果您从Form1实例调用add()方法,则将this作为参数传递给方法,而不是创建new Form1()

答案 2 :(得分:0)

显然,sub中的索引位置1没有任何内容。

chkBox.Text = f1.sub[1];

列表sub中的数据长度小于2.

如果您说它包含5个元素,请确保对该对象的引用仍然有效。我觉得你没有从你想要的列表中获取数据,而是可能是空的。简而言之,sub并未指向您认为的列表。

提示:尽可能避免对代码中的值进行硬编码。以编程方式查找索引并使用它。示例(仅演示):

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