Windowsフォームのボタンをクリックすると動的ラベルが作成されました。ラベルを右クリックします。コンテキストメニュー "cm"を表示しています。私は明らかにコンテキストメニュー項目に機能を追加したいと思う。しかし、私が理解できないことは、イベントハンドラ内の "lbl"オブジェクトをどのように参照するのかです。 MarkedImportantとEditLabelという名前のイベントハンドラ内からラベルのプロパティを編集するにはどうすればよいですか?C#で動的ラベルを編集するためのイベントハンドラを作成する方法は?
public void btnMonSub_Click(object sender, EventArgs e)
{
string s = txtMonSub.Text;
Label lbl = new Label();
lbl.Text = s;
lbl.Location = new System.Drawing.Point(205 + (100 * CMonSub), 111);
CMonSub++;
lbl.Size = new System.Drawing.Size(100, 25);
lbl.BackColor = System.Drawing.Color.AliceBlue;
this.Controls.Add(lbl);
ContextMenu cm = new ContextMenu();
cm.MenuItems.Add("Mark Important", MarkImportant);
cm.MenuItems.Add("Edit", EditLabel);
lbl.ContextMenu = cm;
}
private void MarkImportant(object sender, EventArgs e)
{
// imp..
}
private void EditLabel(object sender, EventArgs e)
{
// edit..
}
これを行うには良い方法がありますか?イベントハンドラ自体を動的に追加するのと同じですか?
ありがとうございます。
を通過したに添付このイベントは何ですか?これはボタンのイベントのように見えますが、そのボタンに関連付けられたラベルにアクセスする必要があります。そのインスタンスでラベルにアクセスすることも、より動的にする必要がある場合は、ラベルをボタンに関連付ける必要があります。それはいろいろな方法で行うことができます。最良の方法は、アプリケーションがどのようにどのような要件をどのように設計しているかに完全に依存します。 – gmiley
これは 'object sender'を介して取得できます。それを非常によく説明している[この広範な答え](http://stackoverflow.com/a/4886417/594832)を見てください。 – khlr
@khlrできません。イベントハンドラはContextMenuに添付され、送信者はContextMenuになります。 – Steve