添加动态控件以使winform无法正常工作

时间:2015-04-20 06:20:55

标签: c# winforms picturebox

我正在PictureBox创建动态WinForms和标签。为此,我创建了一个基于给定整数创建这些项的方法。在加载表单的第一次运行中,它工作顺利,但是当我从下拉框中传递任何整数时,它不会进行任何更改。我尝试调试代码,并相应地创建了所有标签,但它没有反映在winForm中。我尝试使用Invalidate,Update,Refresh,但没有使用它们。

这是我实施的方法。

private void createPictureBox(int size)
{
    //this.Controls.Clear();
    panel1.Controls.Clear();
    Label[] ParameterLabel = new Label[size];
    PictureBox[] ParameterBack = new PictureBox[size];
    int y_value = 11;
    this.Refresh();
    for (int i = 0; i < size; ++i)
    {

        ParameterLabel[i] = new Label();
        ParameterLabel[i].Text = "Test Text";
        ParameterLabel[i].Font = new System.Drawing.Font("Calibri", 8, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
        ParameterLabel[i].ForeColor = System.Drawing.Color.White;
        ParameterLabel[i].BackColor = System.Drawing.Color.FromArgb(1, 0, 64);
        ParameterLabel[i].Size = new System.Drawing.Size(145, 20);
        ParameterLabel[i].Location = new Point(30, y_value);
        ParameterLabel[i].Anchor = AnchorStyles.Left;
        ParameterLabel[i].Visible = true;

        ParameterBack[i] = new PictureBox();
        ParameterBack[i].Image = Image.FromFile(STR_SETTING_PATH + "\\" + STR_IDEA_NO_XXXXX + "_01_nv.png");
        ParameterBack[i].Size = new System.Drawing.Size(400, 32);
        ParameterBack[i].Location = new Point(2, y_value - 10);
        ParameterBack[i].Anchor = AnchorStyles.Left;
        ParameterBack[i].Visible = true;
        //this.Controls.Add(ParameterBack[i]);

        y_value += 37;
    }
    panel1.Controls.AddRange(ParameterLabel);
    panel1.Controls.AddRange(ParameterBack);
    panel1.Invalidate();
}

2 个答案:

答案 0 :(得分:1)

谁能区分第一次通话中创建的控件和其他通话中创建的控件?我通过微小的改变测试了你的功能,似乎工作得很好:

int CallIndex = 0; // this is on the form level

    private void button1_Click(object sender, EventArgs e)
    {
        createPictureBox(3);
        CallIndex += 1;
    }

    private void createPictureBox(int size)
    {
    // this has the exact same code as your method (copy-paste into my visual studio), 
    // except this change: 
    // ParameterLabel[i].Text = "Test Text";
    ParameterLabel[i].Text = string.Format("Test {0}", CallIndex); // instead of the row above
    }

答案 1 :(得分:0)

我确实删除了以前添加的控件并添加了新控件,之后显然解决了我的问题。问题是由于控件堆叠在另一个上面。我首先使用

删除了以前创建的控件
this.Controls.Remove(UserControl1);

然后重新创建了它的实例,解决了我的问题。