簡體   English   中英

C# - 如何使用變量命名帶有數字后綴的新事件處理程序?

[英]C# - How can I name a new event handler with number suffix using a variable?

我正在以編程方式創建新圖片框及其單擊事件處理程序。 但我不能單獨使用它們,因為我無法正確命名它們。 我需要將事件處理程序命名為 box1_click、box2_click...

用整數分別命名新事件處理程序的最簡單方法是什么?

我的嘗試:

for(i=1; i<11; i++)
{
   boxes[i] = new PictureBox();
   boxes[i].Name = "box" + i;
   boxes[i].Click += new EventHandler( ??? );
}

您應該始終使用相同的事件處理程序。 在處理程序中,您將決定發送者參數必須做什么。

有多種方法可以做到這一點。

您可以將事件處理程序添加為 lambda 表達式,通過像這樣的反射調用每個特定處理程序(確保將您的處理程序定義為公共方法):

MethodInfo method = this.GetType().GetMethod("B_Click" + i.ToString());
boxes[i].Click += (o,e) =>
{
    if (null != method)
    {
        method.Invoke(this, new object[2] { o, e });
    }
};

...

 public void B_Click1(object sender, EventArgs e)
 public void B_Click2(object sender, EventArgs e)
 etc...

另一種選擇是使用 Delegate.CreateDelegate 而不是像這樣的 lambda 表達式來創建委托事件處理程序:

MethodInfo method = this.GetType().GetMethod("B_Click" + i.ToString());
EventHandler handler = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), this, method);
boxes[i].Click += handler;

...

 public void B_Click1(object sender, EventArgs e)
 public void B_Click2(object sender, EventArgs e)
 etc...

可能最好的選擇是為所有圖片框定義一個處理程序,並將發送者對象轉換為點擊的圖片框,如下所示:

boxes[i].Click += B_Click;

...

private void B_Click(object sender, EventArgs e)
{
    PictureBox clickedPictureBox = sender as PictureBox;
    if (clickedPictureBox != null)
    {
        string name = clickedPictureBox.Name; // for example get picture box name
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM