Winforms 创建新控件并将其动态添加到窗体

Winforms 创建新控件并将其动态添加到窗体,winforms,c#-4.0,Winforms,C# 4.0,我使用以下代码创建了一个标签: public static System.Windows.Forms.PictureBox pc = new PictureBox(); public static System.Windows.Forms.Label la = new Label(); private void label2_Click(object sender, EventArgs e) { label2.Visible = false; pictureBox2.Hid

我使用以下代码创建了一个标签:

public static System.Windows.Forms.PictureBox pc = new PictureBox(); 

public static System.Windows.Forms.Label la = new Label();

private void label2_Click(object sender, EventArgs e)
{
    label2.Visible = false;
    pictureBox2.Hide();
    Controls.Add(la);
    la.Location = new Point(78, 191);
    la.Size = new Size(72, 77);
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
}

我希望能够创建一个新标签,并在单击此标签时将其添加到表单中。如何执行此操作?

您可以添加一个单击处理程序:

la.Click += new EventHandler(la_Click);
然后在处理程序中:

void la_Click(object sender, EventArgs e)
{
    //add new label
}
编辑-注释的解释。您的代码如下所示:

public static System.Windows.Forms.PictureBox pc = new PictureBox(); 

public static System.Windows.Forms.Label la = new Label();

private void label2_Click(object sender, EventArgs e)
{
    label2.Visible = false;
    pictureBox2.Hide();
    Controls.Add(la);
    la.Location = new Point(78, 191);
    la.Size = new Size(72, 77);
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
    la.Click += new EventHandler(la_Click);
}

void la_Click(object sender, EventArgs e)
{
    //the new label has been clicked
}
您已将标签设置为静态,其中只有一个。将同一标签添加到控件集合无效。您需要创建一个新的标签控件:

private int labelCount;

private void label2_Click(object sender, EventArgs e)
{
    var la = new Label();
    la.Size = new Size(72, 77);
    la.Location = new Point(78, 191 + labelCount * (la.Height + 10));
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
    la.Text = "Make it visible";
    labelCount++;
    la.Name = "label" + labelCount.ToString();
    la.Click += new EventHandler(la_Click);
    Controls.Add(la);
}

void la_Click(object sender, EventArgs e)
{
    var la = (Label)sender;
    // You could use the Name property
    //...
}

这段代码的意图很难猜测,我只是写了一些有明显副作用的东西。

sorry@keyboard。。我不明白你的代码!:(…您能详细说明一下吗?请尝试制作新标签(
la
)可点击?如果是这样,就像你添加
位置、大小和图像
属性的方式一样,你可以添加
事件
。我已经为标签添加了
点击
事件,并将其链接到处理程序。我
是初学者。。你的代码可能很好。
但我很难理解你!无论如何,谢谢。!:)我花时间理解了这段代码,但很好!。。这段代码写得非常好:)非常感谢。
private int labelCount;

private void label2_Click(object sender, EventArgs e)
{
    var la = new Label();
    la.Size = new Size(72, 77);
    la.Location = new Point(78, 191 + labelCount * (la.Height + 10));
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
    la.Text = "Make it visible";
    labelCount++;
    la.Name = "label" + labelCount.ToString();
    la.Click += new EventHandler(la_Click);
    Controls.Add(la);
}

void la_Click(object sender, EventArgs e)
{
    var la = (Label)sender;
    // You could use the Name property
    //...
}