2017-04-20 4 views
-1

Ich wollte die folgende Aktion vereinfachen: Klicken Sie auf ein Panel und das Panel ändert seine Farbe zu grün, und wenn es grün ist, ändern Sie es wieder in grau. Ich habe mich gefragt, wie Sie die Steuerelemente als Argument in die Methode schreiben würden, so dass es für jede Steuerung funktionieren würde, ohne die Ereignismethode duplizieren zu müssen.C# Vereinfachung einer Click-Event-Methode, um andere Controls einzubinden

Normalerweise: Panel Click-Ereignis

panel_Click() 
    //some if statement 
    panel1.BackColor = green 
    panel1.BackColor = gray 

dann pro Kontrolle wiederholen. Statt dessen würde ich eine zentrale Methode erstellen, die alle Steuerelemente abonniert werden, das den Namen des Panels wie lesen:

genericpanel_Click(){ 
    ChangeColor(thisPanelname); 
} 

und dann, dass die Verwendung des Arguments/Parameter machen würde:

public void ChangeColor(panel? Mypanel) { 
    //some if... 
    Mypanel.BackColor = Green 
    Mypanel.BackColor = Gray 
} 

Was ist das genaue Äquivalent dieses Pseudo-Codes in einen funktionierenden?

Edit: Okay, ja, ich kann jetzt sehen, dass es ein Duplikat ist, keine Notwendigkeit, weiter zu downvote. Ich wusste einfach nicht, wonach ich gezielt suchen sollte. Wie auch immer, ich habe die Antwort an dieser Stelle gefunden.

+1

Fügen Sie den Parameter 'Objekt Absender' in die Ereignismethode ein, wirf ihn in das Panel und ändere dann seine Farben? – schroedingersKat

Antwort

1

Alle Ereignisse eines Steuerelements stellen seine Quelle als erstes Argument zur Verfügung. Sie müssen es nur auf die richtige Art werfen:

void panel_Click(object sender, EventArgs e) { 
    Panel myPanel = (Panel)sender; 
    ChangeColor(myPanel); 
} 

Alle Definitionen für Event-Handler Delegierten bieten den Absender, zum Beispiel:

public delegate void EventHandler(object sender, EventArgs e); 
public delegate void EventHandler<T>(object sender, T e); 

Falls Sie Ihre eigenen Veranstaltungen zu definieren, verwenden nur jene Delegierten Typen und übergeben Sie die Quelle des Ereignisses als erstes Argument.

1

Sie können alle Panels dieser Methode abonnieren:

private void panel_Click(object sender, EventArgs e) 
{ 
    Panel clickedPanel = sender as Panel; 
    if (clickedPanel != null) 
    { 
     if (clickedPanel.BackColor == Color.Blue) 
     { 
      clickedPanel.BackColor = Color.Red; 
     } 
     else 
     { 
      clickedPanel.BackColor = Color.Blue; 
     } 
    } 
} 

Wenn Sie nur abonnieren Panels auf diese auch die erste Prüfung nicht erforderlich, aber sicher sein dort zu sein.

Diese Methode verwendet den Absender (das Feld, das das Ereignis aktiviert hat) und prüft seine Hintergrundfarbe. Wenn Farbe A auf Farbe B eingestellt ist -> sonst Farbe A

Verwandte Themen