从foreach循环添加控件

时间:2013-12-09 15:24:47

标签: c# .net winforms

我正在尝试从foreach循环向面板添加控件。 当我按下按钮时,我希望数组中的每个元素都显示为复选框。这很好,然后我想在复选框后面的数字更新,以便用户可以选择一个值。

创建复选框的代码工作正常,对于我的数组中的每个项目,它都会显示复选框。但它只显示1个NumericUpDown。

有人可以告诉我为什么它只显示1个数字更新,而它显示所有复选框?

这是我的代码:

private void bierButton_Click(object sender, EventArgs e)
{
    int height = 1;
    int padding = 10;
    int i = 0;
    int x = 0;
    CheckBox[] chk = new CheckBox[10];
    NumericUpDown[] nmr = new NumericUpDown[10];
    orderBox.Clear();
    hideBtn();
    foreach (string bieren in Drinks.bier)
    {
        chk[i] = new CheckBox();
        nmr[i] = new NumericUpDown();
        chk[i].Name = i.ToString();
        chk[i].Text = Drinks.bier[i];
        chk[i].TabIndex = i;
        chk[i].AutoCheck = true;
        chk[i].Bounds = new Rectangle(10, 0 + padding + height, 200, 22);
        panel1.Controls.Add(chk[i]);
        testPanel.Controls.Add(nmr[i]);
        height += 22;
        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎没有更新 NumericUpDown 控件的位置。

他们都在那里,他们只是在彼此之上。

考虑这一变化:

private void bierButton_Click(object sender, EventArgs e)
{
    int height = 1;
    int padding = 10;
    int i = 0;
    int x = 0;
    CheckBox[] chk = new CheckBox[10];
    NumericUpDown[] nmr = new NumericUpDown[10];
    orderBox.Clear();
    hideBtn();
    foreach (string bieren in Drinks.bier)
    {
        chk[i] = new CheckBox();
        nmr[i] = new NumericUpDown();
        chk[i].Name = i.ToString();
        chk[i].Text = bieren; // Drinks.bier[i];
        chk[i].TabIndex = i;
        chk[i].AutoCheck = true;
        chk[i].Bounds = new Rectangle(10, 0 + padding + height, 200, 22);
        // Start New Code
        nmr[i].Bounds = new Rectangle(10, 0 + padding + height, 200, 22);
        // End New Code
        panel1.Controls.Add(chk[i]);
        testPanel.Controls.Add(nmr[i]);
        height += 22;
        i++;
    }
}

我还将一行更改为chk[i].Text = bieren;