C# 向winform添加动态控件无效
我正在C# 向winform添加动态控件无效,c#,winforms,picturebox,C#,Winforms,Picturebox,我正在WinForms中创建动态PictureBox和标签。为此,我创建了一个基于给定整数创建这些项的方法。在加载表单时的第一次运行中,它工作平稳,但当我从下拉框中传递任何整数时,它不会进行任何更改。我试着调试代码,所有标签都相应地创建了,但它没有反映在winForm中。我试过使用Invalidate、Update和Refresh,但它们都不起作用 下面是我已经实现的方法 private void createPictureBox(int size) { //this.Controls.
WinForms
中创建动态PictureBox
和标签。为此,我创建了一个基于给定整数创建这些项的方法。在加载表单时的第一次运行中,它工作平稳,但当我从下拉框中传递任何整数时,它不会进行任何更改。我试着调试代码,所有标签都相应地创建了,但它没有反映在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();
}
private void createPictureBox(整数大小)
{
//this.Controls.Clear();
panel1.控件。清除();
标签[]参数标签=新标签[尺寸];
PictureBox[]参数back=新PictureBox[size];
int y_值=11;
这个。刷新();
对于(int i=0;i
谁能区分在第一次调用中创建的控件和在其他调用中创建的控件?我对您的功能进行了测试,只是做了一点小小的改动,它似乎工作正常:
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
}
我确实删除了以前添加的控件,并添加了新的控件,这显然解决了我的问题。这个问题是由于一个接一个的控制。我首先使用删除了以前创建的控件
this.Controls.Remove(UserControl1);
然后重新创建它的实例,解决了我的问题。这可能是因为您的y_值在方法中声明,每次调用此方法时,都要将它创建的元素放在上次创建的元素之上。是的,我希望从一开始就像创建新控件一样创建控件。问题是您总是在添加控件-您打算如何删除一些控件?你把图片盒叠在一起。你在哪里取旧的?