2012-05-21 3 views
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 

Теперь мне нужно знать, как сделать функцию, которая, при нажатии на ссылку, удаляет саму ссылку.

Итак, любая помощь?

ответ

1
private void Click_anexo(object sender, EventArgs arg) 
{ 

} 

Объект sender параметр содержит информацию об элементе управления, который обожженного это событие. В ролях sender, как этикетка

LinkLabel lbl = (LinkLabel)sender; 

и использовать его

lbl.Visible = false; 

Я думаю, что делает его невидимым, так хорошо, как удален.

+0

EventArguments? try EventArgs –

+0

@MarkHall: Спасибо –

+0

Чтобы удалить, я просто добавляю: this.Controls.RemoveByKey (lbl.Name); Но спасибо! –

2

в делегате Click_anexo у вас должен быть параметр sender.

Этот параметр имеет тип object, но на самом деле это элемент управления, который поднял это событие.

Просто отбросьте его до нужного вам типа, и вы сделали это.

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(); 
} 
+0

Хм, хорошо, спасибо за предупреждение! –

Смежные вопросы