gpt4 book ai didi

c# - 在 FlowLayoutPanel 上删除动态添加的标签

转载 作者:行者123 更新时间:2023-11-30 22:34:19 24 4
gpt4 key购买 nike

我在 FlowLayoutPanel 上动态添加了 Label,代码如下:

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中,我添加了两个Item Add和Edit,并将其关联到FlowLayoutPanel,意思是当用户右键点击FlowLayoutPanel,编辑和出现删除菜单。

现在我想使用删除按钮 (ContextMenuStrip) 删除动态添加的标签。我只想右键单击 desire lebel,然后右键单击它应该被删除。和编辑按钮相同的情况下进行编辑。

最佳答案

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

您应该在为标签的右键单击事件调用的同一子程序中向标签添加事件处理程序。在这个处理程序中是上面调用 .Remove 的地方。

或者,由于事件处理程序将传递 sender 对象,该对象将引用触发事件的控件,您可以调用 .Remove 并传递 sender。您不必以这种方式保留对标签的引用,除非您需要它来做其他事情。

要求的例子

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

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

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

关于c# - 在 FlowLayoutPanel 上删除动态添加的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com