2016-04-26 13 views
0

これは私がやろうとしていることですが、フォームの中でどの色を選択したかに応じて、すべてのラベルの色を同時に変更します。私が試したより簡単な方法でこれを行う方法はありますか?ここで同時に10ラベルの色を変更します。

private void SetColor() 
    { 
     if (checkBoxBlue.Checked == true) 
     { 
      labelOrigo.ForeColor = System.Drawing.Color.Blue; 
      labelN.ForeColor = System.Drawing.Color.Blue; 
      labelNW.ForeColor = System.Drawing.Color.Blue; 
      labelW.ForeColor = System.Drawing.Color.Blue; 
      labelSW.ForeColor = System.Drawing.Color.Blue; 
      labelS.ForeColor = System.Drawing.Color.Blue; 
      labelSE.ForeColor = System.Drawing.Color.Blue; 
      labelE.ForeColor = System.Drawing.Color.Blue; 
      labelNE.ForeColor = System.Drawing.Color.Blue; 
     } 

     else if (checkBoxBlack.Checked == true) 
     { 
      labelOrigo.ForeColor = System.Drawing.Color.Black; 
      labelN.ForeColor = System.Drawing.Color.Black; 
      labelNW.ForeColor = System.Drawing.Color.Black; 
      labelW.ForeColor = System.Drawing.Color.Black; 
      labelSW.ForeColor = System.Drawing.Color.Black; 
      labelS.ForeColor = System.Drawing.Color.Black; 
      labelSE.ForeColor = System.Drawing.Color.Black; 
      labelE.ForeColor = System.Drawing.Color.Black; 
      labelNE.ForeColor = System.Drawing.Color.Black; 
     } 

     else if (checkBoxRed.Checked == true) 
     { 
      labelOrigo.ForeColor = System.Drawing.Color.Red; 
      labelN.ForeColor = System.Drawing.Color.Red; 
      labelNW.ForeColor = System.Drawing.Color.Red; 
      labelW.ForeColor = System.Drawing.Color.Red; 
      labelSW.ForeColor = System.Drawing.Color.Red; 
      labelS.ForeColor = System.Drawing.Color.Red; 
      labelSE.ForeColor = System.Drawing.Color.Red; 
      labelE.ForeColor = System.Drawing.Color.Red; 
      labelNE.ForeColor = System.Drawing.Color.Red; 
     } 
    } 
+0

コードはすでに動作しています。スタイル以外の問題はありません。代わりにcodereview.stackexchange.comでこのような質問をしてみてください。 –

答えて

1

提案です:

  1. はあなたのコードの先頭に行using System.Drawing;を追加します。
  2. System.Drawing.Color.Blueなどを宣言します。短い名前の定数には、代わりに 変数を使用します。
  3. 以下に示すように、配列とループを使用して、書き込まれたコードを減らしてください。

// At the top of the file 
using System.Drawing; 
// ... 
// In your method: 
// Store associations with checkboxes and their colors 
// in a convenient array, making it easy to extend in 
// case additional colors need to be supported 
var checkBoxColors = new[] { 
    new { CheckBox = checkBoxBlue, Color = Color.Blue }, 
    new { CheckBox = checkBoxBlack, Color = Color.Black } 
    // Add more if needed 
}; 
foreach(var check in checkBoxColors) { 
    if (check.CheckBox.Checked) { 
    // Rename `check.Color` to a shorter variable 
    var color = check.Color; 
    labelOrigo.ForeColor = color; 
    labelN.ForeColor = color; 
    // ...and so on   
    } 
} 
1

があります。 forループまたはforeachループを使用します。私はforeachループを好む傾向がありますが、より速いと信じています:

foreach(Control ctl in this.Controls) 
{ 
    if(ctl.GetType().Name=="Label") 
    { 
     ctl.ForeColor = Color.Blue; 
    } 
} 
関連する問題