2016-07-06 55 views
-1

我有組合框的數組:發送不同的對象與事件處理

ComboBox[] boxes = new ComboBox[3]{ComboBox box1, ComboBox box2, ComboBox box3}; 

每個組合框被傳遞到相同的事件處理程序時,他們的指標變化:

foreach (ComboBox box in boxes) 
{ 
    box.SelectedIndexChanged += new EventHandler(this.Box_Changed); 
} 

我會喜歡做的是傳遞不是單個ComboBox,而是整個boxes[]數組到事件處理程序。我怎樣才能做到這一點?

+0

不確定明白;當一個數組沒有引發事件時,如何將一個事件附加到一個數組上? – Sehnsucht

+0

*您*不會「發送」或將它們傳遞給處理程序:WIndows會響應用戶單擊。如果可以的話,你的下一個問題將是如何判斷哪一個被真正點擊。您可以隨時在事件代碼中引用其他人。 – Plutonix

+0

我一定是誤解了一些東西。是否有可能使數組成爲全局的,並從事件處理函數內部訪問它? – Nemo

回答

1

您無法真正更改發送到回調的內容,因爲您代表框架調用該內容。

您可以找到其他地方存儲數據,比如每個ComboBox的.Tag屬性,也可以創建一個簡單的小助手方法來了解ComboBox,並讓它爲您傳遞這些數據。

public void Example(ComboBox[] boxes) 
{ 
    // Using a statement lambda to wrap the call 
    foreach (ComboBox box in boxes) 
    { 
     box.SelectedIndexChanged += new EventHandler((sender, e) => 
     { 
      Box_Changed_Example1(boxes, sender, e); 
     }); 
    } 

    // Or, use the .Tag property to store the data 
    foreach (ComboBox box in boxes) 
    { 
     box.Tag = boxes; 
     box.SelectedIndexChanged += new EventHandler(Box_Changed_Example2); 
    } 
} 

void Box_Changed_Example1(ComboBox[] boxes, object sender, EventArgs e) 
{ 
    // TODO 
} 

void Box_Changed_Example2(object sender, EventArgs e) 
{ 
    ComboBox[] boxes = (ComboBox[])((ComboBox)sender).Tag; 
    // TODO 
} 
相關問題