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

本文关键字:添加 删除 标签 动态 sharp | 更新日期: 2023-09-27 17:52:33

大家好!我想动态地删除标签,当复选框未选中时,标签应该被删除,当复选框被选中时,标签应该被添加。下面是我的代码:-

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);
    }
}

但是这个代码else语句不起作用。每当我选中复选框,标签就会创建,但每当我选中复选框,标签就不会被移除。谁来帮帮我。

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

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

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

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;
        }
    }
}

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

当取消选中复选框时,动态创建了一个新标签,然后不显示它。
所有之前创建的标签都不受您的代码的影响…

可以在函数作用域之外添加对标签的引用:

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);            
    }
}

问题是,您没有隐藏对您可见的标签,而是创建了一个新标签,该标签没有添加到表单中(只有当CheckBox被选中时才会被选中,但随后它不会被隐藏)。原始标签将保持不变,因此仍然可见。在取消选中和多次选中之后,将会有那么多标签,相互隐藏(只有最上面可见的)。

最简单的方法是在设计器中创建带有表单的标签(我们称之为lblDynamic),然后设置lblDynamic。在属性编辑器中可见false(右键单击lblDynamic,然后单击"属性")。

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

实际上没有必要在代码中创建标签,如果设计器可以为您做这项工作-至少在这种情况下。