C# 从foreach循环添加控件

C# 从foreach循环添加控件,c#,.net,winforms,C#,.net,Winforms,我试图从foreach循环向面板添加控件。 当我按下按钮时,我希望数组中的每个元素都显示为复选框。这是wordking fine,然后我希望复选框后面有一个数字向上向下,以便用户可以选择一个值 用于创建复选框的代码工作得很好,对于数组中的每个项目,它都会显示e复选框。但它只显示1个数字向上向下 有人能告诉我为什么它只显示1个数字向上向下,而显示所有的复选框吗 这是我的密码: private void bierButton_Click(object sender, EventArgs e) {

我试图从foreach循环向面板添加控件。 当我按下按钮时,我希望数组中的每个元素都显示为复选框。这是wordking fine,然后我希望复选框后面有一个数字向上向下,以便用户可以选择一个值

用于创建复选框的代码工作得很好,对于数组中的每个项目,它都会显示e复选框。但它只显示1个数字向上向下

有人能告诉我为什么它只显示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++;
    }
}

您似乎没有更新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

也许是因为你没有填充它的边界属性?也许您的所有数字上下控制都只是简单地显示在彼此的顶部,全部位于完全相同的位置。这与您当前的问题无关,但您是舒尔饮料公司吗。bier最多只能有10个项目?如果我知道你在哪里,我会做新的复选框[Drinks.bier.Count]或类似的操作。编辑:事实上,在代码中根本没有理由使用数组,只需声明CheckBox chk=newcheckbox;NumericUpDown nmr=新的NumericUpDown位于foreach循环内,并删除所有[i]项。EDIT2:我也会用“换饮料”。bier[I]到Bieren对我来说,看起来你只有一杯饮料。Tnx伙计们,我需要添加并修复我的bounds属性。现在它就像一个符咒斯科特·张伯伦,你在右边,不需要阵列。Tnx所有的帮助:当然,nmr[i]的界限应该是你需要的任何东西。