在FlowLayoutPanel上删除动态添加的Label

时间:2011-10-25 04:01:25

标签: c# flowlayoutpanel

我已在 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,右键单击后应将其删除。与编辑按钮相同的情况进行编辑。

1 个答案:

答案 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变量。