我正在尝试使用linklabels创建一个“列表”来识别附件(在邮件客户端中)。所以,我这是为了创建链接:
Label newLabel = new LinkLabel();
newLabel.Name = "anexo" + Convert.ToString(anexos_file.Count); //anexos_file is a list where all the attachments Paths exist
newLabel.Text = Path.GetFileName(file);
newLabel.Left = bt_anexos.Left;
newLabel.Top = label2.Top;
newLabel.Width = 150;
newLabel.AutoSize = true;
newLabel.Click += new System.EventHandler(Click_anexo); //Click_anexo is the name of the function
现在我需要知道如何创建一个函数,当我点击链接时,删除链接本身。
那么,有什么帮助吗?
答案 0 :(得分:2)
在Click_anexo
代理中,您必须拥有sender
参数。
该参数属于object
类型,但它实际上是引发该事件的控件。
只需将其转换为您需要的类型即可。
答案 1 :(得分:1)
private void Click_anexo(object sender, EventArgs arg)
{
}
对象sender
参数包含有关触发此事件的控件的信息。将sender
投射为标签
LinkLabel lbl = (LinkLabel)sender;
并使用它
lbl.Visible = false;
我认为让它看不见就像被删除一样好。
答案 2 :(得分:0)
回复你的陈述并澄清我的一些评论。
删除我只需添加:this.Controls.RemoveByKey(lbl.Name);
您在此处所做的就是从ControlCollection中删除您创建的控件。控件仍然存在,如果你创建了很多这些,他们仍然会在内存中闲逛。如果您计划重用这些控件,那么这很好,但如果它们仅用于一次性使用,则会导致内存泄漏。我这样做的方法是删除eventhandler并处理这样的对象:
private void Click_anexo(object sender, EventArgs e)
{
LinkLabel lbl = (LinkLabel)sender;
lbl.Click -= new EventHandler(Click_anexo);
lbl.Dispose();
}