0

我正在尝试使用链接标签创建一个“列表”来识别附件(在邮件客户端中)。所以,我有这个来创建链接:

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

现在我需要知道如何创建一个功能,当我单击链接时,会删除链接本身。

那么,有什么帮助吗?

4

3 回答 3

2

Click_anexo委托中你必须有sender参数。

该参数属于object类型,但实际上是引发该事件的控件。

只需将其转换为您需要的类型即可。

于 2012-05-21T11:45:14.397 回答
1
private void Click_anexo(object sender, EventArgs arg)
{

}

对象sender参数包含有关触发此事件的控件的信息。投射sender为标签

LinkLabel lbl = (LinkLabel)sender;

并使用它

lbl.Visible = false;

我认为使其不可见与删除一样好。

于 2012-05-21T11:50:22.300 回答
0

回应您的陈述并澄清我的一些评论。

要删除我只需添加: this.Controls.RemoveByKey(lbl.Name);

您在这里所做的只是从 ControlCollection 中删除您创建的控件。控件仍然存在,如果您创建了很多这些控件,它们仍然会在内存中徘徊。如果您打算重用这些控件,那么这很好,但如果它们只是一次性使用,您将导致内存泄漏。我会这样做的方式是删除事件处理程序并像这样处理对象:

private void Click_anexo(object sender, EventArgs e)
{
    LinkLabel lbl = (LinkLabel)sender;
    lbl.Click -= new EventHandler(Click_anexo);
    lbl.Dispose();
}
于 2012-05-21T13:10:40.147 回答