2016-11-11 7 views
0

Ich verwende eine Liste von Objekten als Eingabe für meine Anwendung und die Anzahl der Objekte in der Liste ändert sich. Für jedes Objekt in der Liste erstelle ich dynamisch ein Panel und fügen Sie sie zu den Kontrollen der anderen PlatteAuswählen/Abwählen, Farbe mehrerer dynamisch erstellter Panels ändern

private void addPanel(string name, int positionFromLeft, Panel mainPanel) 
    { 
     Panel panel = new System.Windows.Forms.Panel(); 
     panel.Name = name; 
     panel.Location = new System.Drawing.Point(50 + positionFromLeft, 160); 
     panel.BackColor = System.Drawing.Color.SteelBlue; 
     panel.Size = new System.Drawing.Size(120, 40); 
     panel.Click += new EventHandler(this.pClick);    
     mainPanel.Controls.Add(panel); 
    } 

Zu jedem Panel ich einen Click-Ereignishandler hinzuzufügen, die die Farbe der Platte ändert:

private void pClick(object sender, EventArgs e) 
    { 
     Panel panel= (sender as Panel); 
     panel.BackColor = Color.Green; 
    } 

Wie kann ich beim zweiten Klick eine Farbe in eine andere Farbe (rot usw.) ändern? Und ändern Sie es zurück (auf grün usw.), wenn Sie erneut darauf klicken. Grundsätzlich kann mit jedem Klick die Farbe eines Panels von grün nach rot und umgekehrt geändert werden. Es muss mit jedem Panel funktionieren, so dass ich während der Laufzeit die Farbe von beispielsweise 10 Panels in grün und 10 Panels in rot und umgekehrt ändern kann.

Antwort

-1

Ich fand eine Lösung, vielen Dank.

private void pClick(object sender, EventArgs e) 
{ 
    Panel panel = (sender as Panel); 
    if (panel.BackColor == Color.SteelBlue) 
    { 
     panel.BackColor = Color.Green; 
    } 
    else if (panel.BackColor == Color.Green) 
    { 
     panel.BackColor = Color.Red; 
    } 
    else if (panel.BackColor == Color.Red) 
    { 
     panel.BackColor = Color.Green; 
    } 
} 
0

Wenn ich es richtig verstanden habe, möchten Sie das angeklickte Panel umschalten.

private void pClick(object sender, EventArgs e) 
{ 
    Panel panel = (sender as Panel); 
    if (panel.BackColor == Color.Green) { 
     panel.BackColor = Color.Red; 
    } else if (panel.BackColor == Color.Red) { 
     panel.BackColor = Color.Green; 
    } 
} 
+0

Nicht alle von ihnen, nur die angeklickt. Farbe vor und zurück ändern. Grundsätzlich muss ich den aktuellen Klickzustand für jedes dynamisch erstellte Panel erfassen. – 01egi4

+0

Dann ist die neue Lösung die richtige. Sie können zwischen der aktuellen "BackColor" und der neuen "BackColor", die Sie einstellen möchten, wechseln. – jorgonor

+0

Diese Lösung wird nicht funktionieren, weil die Anfangsfarbe nicht grün ist, sondern SteelBlue. – 01egi4

Verwandte Themen