移除FlowLayoutPanel上动态添加的标签

本文关键字:标签 添加 动态 FlowLayoutPanel 移除 | 更新日期: 2023-09-27 18:12:31

我在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)。我想只是右键点击欲望等级和右键点击后,它应该被删除。编辑按钮用于编辑也是同样的情况。

移除FlowLayoutPanel上动态添加的标签

在表单中保留对lb变量的引用(而不仅仅是在函数中)。当你想删除它,调用flowLayoutPanel1.Controls.Remove(lb)。

您应该在标签的右键事件调用的同一子节点中为标签添加一个事件处理程序。在这个处理程序中,上面的。remove调用应该在这里。

或者,由于事件处理程序将传入sender对象,这将是对事件触发的控件的引用,因此您可以调用. remove并传入sender。你不需要这样保存对标签的引用,除非你需要它用于其他用途。

请求示例

flowLayoutPanel1.Controls.Remove((ToolStripMenuItem) sender);

注释后再次编辑

我将你的button1的click事件更改为

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事件处理程序来捕获鼠标经过的最后一个标签。

我添加了以下子程序,即上面提到的处理程序。它所做的只是记录鼠标经过的最后一个标签。

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变量