大家好, 我想动态删除标签,当取消选中复选框时,应删除标签,如果选中复选框,则应添加标签。 这是我的代码: -
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);
}
}
但是此代码其他语句不起作用。每当我选中复选框,然后标签创建,但每当我取消选中复选框,那么该标签不会被删除。有人帮帮我。
提前致谢。
答案 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;
}
}
实际上,如果设计师可以为您完成工作,则无需在代码中创建标签 - 至少在这种情况下。