Jestem zwolennikiem upraszczania kodu programu. Bardzo nie lubię redundantności w programowaniu. Po to są procedury i funkcje, obiekty i metody aby powtarzalne fragmenty kodu w nie zamykać i przez to właśnie go upraszczać. I warto pamiętać o obiekcie sender, który przekazuje do funkcji informacje jaki obiekt jest nadawcą komunikatu. Dzięki temu jedna, uniwersalna funkcja zapewni obsługę wielu zdarzeń dla naszych obiektów.
Jak wykorzystać obiekt sender?
Ja wspomniałem, sender zawiera informacje o obiekcie nadawcy. Zamiast wywoływać ten sam kod kilka razy można sprawdzić jaki obiekt wywołał naszą funkcję (czyli kto jest senderem) i na tej podstawie wywołać odpowiedni kod. Ja pokażę na przykładzie kilku obiektów typu button i będę rozpoznawać, jaki przycisk został naciśnięty.
Tworzę więc formę:
Przy standardowym wywołaniu na zdarzenie onClick, w celu wyświetlenia przycisku wyświetlającego na onClick nazwię przycisku można podpiąć metodę:
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("button1"); }
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("button1"); } private void button2_Click(object sender, EventArgs e) { MessageBox.Show("button2"); } private void button3_Click(object sender, EventArgs e) { MessageBox.Show("button3"); }

Postać metody allButtons_click:
private void allButtons_Click(object sender, EventArgs e) { MessageBox.Show((sender as Button).Name.ToString()); }
private void allButtons_Click(object sender, EventArgs e) { Button btn = (sender as Button); MessageBox.Show(btn.Name.ToString()); }
btn.Text="clicked";
private void allButtons_Click(object sender, EventArgs e) { Button btn = (sender as Button); MessageBox.Show(btn.Tag.ToString()); }
|
|