我想在c sharp中动态添加/删除标签

时间:2014-03-23 10:41:32

标签: c# winforms

大家好,              我想动态删除标签,当取消选中复选框时,应删除标签,如果选中复选框,则应添加标签。   这是我的代码: -

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    Label label = new Label();
    label.Name = "customLabel";
    label.AutoSize = true;
    label.Text = "Dynamically Generated Label";
    label.Location = new Point(50, 50);
    label.BringToFront();
    if (checkBox1.Checked)
    {
        this.Controls.Add(label);
    }
    else
    {
        label.Visible = false;
        //this.Controls.Remove(label);
    }
}

但是此代码其他语句不起作用。每当我选中复选框,然后标签创建,但每当我取消选中复选框,那么该标签不会被删除。有人帮帮我。

提前致谢。

3 个答案:

答案 0 :(得分:1)

这是因为在选中复选框时,您没有对添加的标签的引用。

取消选中该复选框后,您会动态创建新标签,然后不显示该标签 以前创建的所有标签都不受您的代码影响......

您可以在函数范围之外添加对标签的引用:

private Label label;  

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (this.label == null)   
    {
        label = new Label(); 
        label.Name = "customLabel";
        label.AutoSize = true;
        label.Text = "Dynamically Generated Label";
        label.Location = new Point(50, 50);
        label.BringToFront();
    }

    if (checkBox1.Checked)
    {
        this.Controls.Add(label);
    }
    else if(label != null && this.Controls.Contains(label))
    {

       this.Controls.Remove(label);            
    }
}

答案 1 :(得分:1)

隐藏和显示标签可能更容易。

如果您仍想添加和删除它,则必须在类的方法之外存储对它的引用。否则你无法轻易删除它。

private Label label;  // field on the class (form)

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (checkBox1.Checked)
    {
        label = new Label(); // instantiate new label
        label.Name = "customLabel";
        label.AutoSize = true;
        label.Text = "Dynamically Generated Label";
        label.Location = new Point(50, 50);
        label.BringToFront();
        this.Controls.Add(label);
    }
    else
    {
        if (label != null) // remove label
        {
            this.Controls.Remove(label);
            label = null;
        }
    }
}

答案 2 :(得分:1)

问题是,您不会隐藏您可见的标签,而是创建一个新标签,该标签不会添加到表单中(只有在选中CheckBox时才会这样,但是它不会被隐藏)。原始标签将不受影响,因此仍然可见。在多次取消检查和检查之后会有很多实验室,相互隐藏(只有最顶层的可见)。

最简单的可能性是在设计器中创建带有表单的标签(让它称之为lblDynamic),然后在属性编辑器中将lblDynamic.Visible设置为false(右键单击lblDynamic,然后单击&# 34;属性&#34)。

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    ...
    if (checkBox1.Checked)
    {
        lblDynamic.Visible = true;
    }
    else
    {
        lblDynamic.Visible = false;

    }
}

实际上,如果设计师可以为您完成工作,则无需在代码中创建标签 - 至少在这种情况下。