我想在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语句不起作用。每当我选中复选框,标签就会创建,但每当我选中复选框,标签就不会被移除。谁来帮帮我。
直接隐藏和显示标签可能会更容易。
如果您仍然想要添加和删除它,则必须在方法之外的类中存储对它的引用。否则你将无法轻易地移除它。
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;
}
}
实际上没有必要在代码中创建标签,如果设计器可以为您做这项工作-至少在这种情况下。