如何在函数期间找出调用者对象的名称?

时间:2012-05-21 11:42:04

标签: c# winforms function linklabel

我正在尝试使用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

现在我需要知道如何创建一个函数,当我点击链接时,删除链接本身。

那么,有什么帮助吗?

3 个答案:

答案 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();
}