2016-04-21 51 views
0

我正在使用Winforms應用程序的C#,並且似乎無法在3組無線電中更改爲默認/「未選定」顏色鈕釦。我知道有一種方法無需單獨按每個按鈕。用於清除選中狀態的foreach中的部分正常工作。這是我的嘗試。更改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; 
       } 

下面是一個groupboxes中的三個單選按鈕的代碼,用於更改開始的顏色。

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

你到底想要做什麼?你如何改變他們的顏色開始?這個代碼中的問題是什麼? – Niklas

+0

如何有一個'RadioButton'?比如說,它的文字「無」 – Ian

+0

@ Ian ......因爲必須選擇每個組中的一個單選按鈕,所以不能有另一個單選按鈕用於「無」。 – DV8DUG

回答

1

我發現的問題是在foreach區域內事件的順序。

這個順序:

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

被觸發_CheckChanged事件,並把顏色回到石灰。

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

切換順序,因此radio1.Checked = false發生的radio1.ForeColor = Color.Black;奏效了之前!