在 FlowLayoutPanel 中仅释放一个控件
本文关键字:一个 控件 FlowLayoutPanel 释放 | 更新日期: 2023-09-27 18:36:01
我正在做程序,通过按钮将标签添加到FlowLayoutPanel。它工作正常,但我添加了上下文菜单,只有一个项目用于删除所选标签。右键单击标签并选择"删除"时,我想处理此特定标签。它曾经有效,但现在不是了。
void fillFLP(FlowLayoutPanel FLP)
{
Label l = new Label();
l.AutoSize = true;
l.Text = textBox.Text;
l.BackColor = Color.Red;
l.Width = 150;
l.AutoSize = true;
l.MaximumSize = new Size(150, 200);
l.MinimumSize = new Size(150, 25);
l.Padding = new Padding(5);
l.Margin = new Padding(25, 5, 25, 0);
ContextMenuStrip deleting= new ContextMenuStrip();
deleting.Items.Add("Delete");
deleting.Click += new System.EventHandler(this.delete);
l.ContextMenuStrip = deleting;
FLP.Controls.Add(l);
l.MouseDown += l_MouseDown;
l.MouseMove += l_MouseMove;
l.MouseUp += l_MouseUp;
}
private void delete(object sender, EventArgs e)
{
this.Dispose();
}
感谢您的任何帮助。
当然,
您处理了错误的对象。 它需要l
,无法到达它,因为你把它变成了局部变量。 最优雅的方法是使用 lambda 表达式或匿名方法捕获它。 请注意,糟糕的名称选择也给您带来了麻烦,您订阅了错误的Click事件。 修复:
ContextMenuStrip cms = new ContextMenuStrip();
var deleting = cms.Items.Add("Delete");
deleting.Click += delegate { l.Dispose(); };
l.ContextMenuStrip = cms;