在循环内创建控件(comboBox等)

时间:2014-02-23 12:22:48

标签: c# visual-studio

我想创建一个循环,将组合框和标签添加到Windows窗体中。我已经创建了它们但我如何访问它们以从组合框中获取线索

while (i < 3)
{
    cboTwinRoom = new ComboBox();
    cboTwinRoom.FormattingEnabled = true;
    cboTwinRoom.Location = new System.Drawing.Point(446, 218 + spacer);
    cboTwinRoom.Name = "name" + i;
    cboTwinRoom.Items.AddRange(new object[] {
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9"});
    cboTwinRoom.Size = new System.Drawing.Size(45, 21);
    cboTwinRoom.TabIndex = 3;
    grpAvailability.Controls.Add(cboTwinRoom);
    i++;
    spacer = spacer + 50;
}

我尝试使用数组来设置comboBox的名称,但是我收到了一个错误。如果有人能提供帮助我会很棒的。提前致谢

错误:名称为'names'的局部变量不能在此范围内声明,因为它会给'names'赋予不同的含义,'names'已在'parent或current'范围内用于表示其他内容

2 个答案:

答案 0 :(得分:0)

行cboTwinRoom.Name =“name”+我不应该工作。你不能将字符串连接到int。 使用“name”+ i.ToString()

答案 1 :(得分:0)

尝试将组合框存储为类级变量。

首先定义一下:

private List<ComboBox> comboBoxes;

然后你的代码看起来像这样:

Func<int, ComboBox> createComboBox = i =>
{
    cb = new ComboBox();
    cb.FormattingEnabled = true;
    cb.Location = new Point(446, 218 + i * 50);
    cb.Name = "name" + i;
    cb.Items.AddRange(new object[]
    {
        "1", "2", "3", "4", "5", "6", "7", "8", "9"
    });
    cb.Size = new Size(45, 21);
    cb.TabIndex = 3;
    return cb;
};

comboBoxes =
    Enumerable
        .Range(0, 3)
        .Select(n => createComboBox(n))
        .ToList();

comboBoxes
    .ForEach(cb => 
        grpAvailability.Controls.Add(cb));

我已经将代码的每个部分分开,希望能够轻松查看每个部分正在做什么。