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から削除することだけです。コントロールはまだ存在しており、これらを多数作成している場合でも、それらはメモリ内でぶらぶらしています。これらのコントロールを再利用する場合は問題ありませんが、1回限りの使用の場合は、メモリリークが発生します。私がそれを行う方法は、イベントハンドラーを削除し、次のようにオブジェクトを破棄することです。

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 に答える