2016-04-21 20 views
0

Ich verwende C# für eine Winforms-App, und ich kann anscheinend nicht in der Lage sein, die Standardfarbe/"nicht ausgewählt" auf meinen 3 Radiogruppen zu ändern Tasten. Ich weiß, dass es einen Weg gibt, ohne es für jeden Knopf einzeln zu machen. Der Teil in foreach zum Löschen des aktivierten Status funktioniert einwandfrei. Hier ist, was ich versucht habe.Ändern der Textfarbe von Optionsfeldern in Winforms

public void ClearForm() 
     { 
      foreach (RadioButton radio1 in carbonationGroupBox.Controls.OfType<RadioButton>().ToList()) 

       if (radio1.Checked == true) 
       { 
        radio1.ForeColor = Color.Black; 
        radio1.Checked = false; 
       } 

      foreach (RadioButton radio2 in strengthGroupBox.Controls.OfType<RadioButton>().ToList()) 

       if (radio2.Checked == true) 
       { 
        radio2.ForeColor = Color.Black; 
        radio2.Checked = false; 
       } 

      foreach (RadioButton radio3 in sweetnessGroupBox.Controls.OfType<RadioButton>().ToList()) 

       if (radio3.Checked == true) 
       { 
        radio3.ForeColor = Color.Black; 
        radio3.Checked = false; 
       } 

Hier ist der Code für drei Radiobuttons aus einem der groupboxes, die die Farbe ändert, um mit zu beginnen.

private void topStrengthHydromel_CheckedChanged(object sender, EventArgs e) 
{ 
    topStrengthStandard.ForeColor = Color.Black; 
    topStrengthSack.ForeColor = Color.Black; 
    topStrengthHydromel.ForeColor = Color.Lime; 
    strengthRadionButton = "Hydromel"; 
} 

private void topStrengthStandard_CheckedChanged(object sender, EventArgs e) 
{ 
    topStrengthHydromel.ForeColor = Color.Black; 
    topStrengthSack.ForeColor = Color.Black; 
    topStrengthStandard.ForeColor = Color.Lime; 
    strengthRadionButton = "Standard"; 
} 

private void topStrengthSack_CheckedChanged(object sender, EventArgs e) 
{ 
    topStrengthHydromel.ForeColor = Color.Black; 
    topStrengthStandard.ForeColor = Color.Black; 
    topStrengthSack.ForeColor = Color.Lime; 
    strengthRadionButton = "Sack"; 
} 
+0

Was genau versuchen Sie wieder zu tun? Wie änderst du zuerst ihre Farbe, was ist das Problem in diesem Code? – Niklas

+0

Wie wäre es mit einem weiteren 'RadioButton'? sagen wir, wir haben "nichts" als Text – Ian

+0

@ Ian ... Es kann keine andere Optionsschaltfläche für "nichts" geben, da ein Optionsfeld aus jeder Gruppe ausgewählt werden muss. – DV8DUG

Antwort

1

Das Problem, das ich war in dem foreach Bereich in der Reihenfolge der Ereignisse entdeckt.

Bestellung:

  if (radio1.Checked == true) 
      { 
       radio1.ForeColor = Color.Black; 
       radio1.Checked = false; 
      } 

wurde das Auslösen der _CheckChanged Ereignis und setzen die Farbe Lime zurück.

private void topStrengthHydromel_CheckedChanged(object sender, EventArgs e) 
{ 
    topStrengthStandard.ForeColor = Color.Black; 
    topStrengthSack.ForeColor = Color.Black; 
    topStrengthHydromel.ForeColor = Color.Lime; 
    strengthRadioButton = "Hydromel"; 
} 

Umschalten der Reihenfolge so die radio1.Checked = false vor geschah das radio1.ForeColor = Color.Black; der Trick!

Verwandte Themen