2016-07-06 11 views
-1

Senden habe ich eine Reihe von Comboboxen:ein anderes Objekt zu einem Event-Handler

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

Jede ComboBox auf den gleichen Event-Handler übergeben wird, wenn ihre Indizes geändert werden:

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

Was würde ich zu tun ist, übergeben Sie nicht eine einzige ComboBox, sondern die gesamte boxes[] Array an den Event-Handler. Wie kann ich das machen?

+0

nicht sicher zu verstehen; Wie würden Sie ein Ereignis an ein Array anhängen, wenn ein Array keine Ereignisse auslöst? – Sehnsucht

+0

* Sie * nicht senden oder übergeben Sie sie an den Handler: Windows reagiert auf den Benutzer klicken. Wenn du könntest, wäre deine nächste Frage, wie du sagen würdest, auf welches * wirklich * geklickt wurde. Sie können immer auf die anderen im Ereigniscode verweisen. – Plutonix

+0

Ich muss etwas falsch verstehen. Wäre es möglich, das Array global zu machen und innerhalb des Event-Handlers darauf zuzugreifen? – Nemo

Antwort

1

Sie können das, was an den Rückruf gesendet wird, nicht wirklich ändern, da dies in Ihrem Auftrag vom Framework aufgerufen wird.

Sie können entweder woanders finden, um die Daten zu speichern, wie die .Tag-Eigenschaft jeder ComboBox, oder Sie können eine einfache kleine Hilfsmethode erstellen, die über die ComboBox informiert und diese Daten für Sie weitergeben kann.

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 
}