我已在 FlowLayoutPanel 上动态添加标签,其代码如下:
private void button1_Click(object sender, EventArgs e)
{
Label lb = new Label();
lb.Text = "How are You";
lb.Size = new Size(650, Font.Height +10);
flowLayoutPanel1.Controls.Add(lb);
flowLayoutPanel1.SetFlowBreak(lb, true);
lb.BackColor = Color.Wheat;
}
在 ContextMenuStrip 中,我添加了两个项目添加和编辑并将其关联 FlowLayoutPanel ,表示用户右键单击 FlowLayoutPanel ,编辑和出现删除菜单。
现在我想使用删除按钮(ContextMenuStrip)删除动态添加标签。我想右键单击欲望lebel,右键单击后应将其删除。与编辑按钮相同的情况进行编辑。
答案 0 :(得分:3)
在表单上保留对lb变量的引用(而不仅仅是在函数内部)。如果要删除它,请调用flowLayoutPanel1.Controls.Remove(lb)。
您应该为同一个sub中的标签添加一个事件处理程序,为标签的右键单击事件调用它。在这个处理程序中,上面调用.Remove应该是。
或者,由于事件处理程序将传递发送方对象,该对象将引用该事件触发的控件,您只需调用.Remove并传入发送方即可。除非你需要其它东西,否则你不必在这个方面保留对标签的引用。
请求的示例
flowLayoutPanel1.Controls.Remove((ToolStripMenuItem) sender);
在评论后再次编辑
我将button1的点击事件更改为
private void button1_Click(object sender, EventArgs e)
{
lb = new Label();
lb.Text = "How are You";
lb.Size = new Size(650, Font.Height +10);
flowLayoutPanel1.Controls.Add(lb);
flowLayoutPanel1.SetFlowBreak(lb, true);
lb.BackColor = Color.Wheat;
lb.MouseEnter += labelEntered;
}
你可以看到我添加了一个MouseEntered事件处理程序来捕获鼠标结束的最后一个标签。
我添加了以下sub,它是上面提到的处理程序。所有这一切都记录了鼠标结束的最后一个标签。
private Label lastLabel;
private void labelEntered(object sender, EventArgs e)
{
lastLabel = (Label)sender;
}
删除按钮的代码已更改为此。
public void Remove_Click(object sender, EventArgs e)
{
if (lastLabel != null)
{
flowLayoutPanel1.Controls.Remove(lastLabel);
lastLabel = null;
}
}
它首先检查以确保lastLabel有一个值,如果它删除了鼠标结束的最后一个标签,则清除lastLabel变量。