2016-10-10 7 views
-1

これまではこのコードがあります。既存のボタンを配列内に保存するには#

Button[] buttons = this.Controls 
    .OfType<Button>() 
    .ToArray(); 

for (int i = 0; i < 25; i++) { 
    buttons[i].FlatStyle = FlatStyle.Flat; 
    buttons[i].ForeColor = Color.Red; 
} 

そしてそれは私にIndexOutOfRangeExceptionを与えます。私は25のボタンを持っています。

for (int i = 0; i < buttons.Length; i++) { 
    buttons[i].FlatStyle = FlatStyle.Flat; 
    buttons[i].ForeColor = Color.Red; 
} 
+1

ボタンの数を変更した場合のi はどうでしょうか? – juharr

+0

本当ですか?なぜあなたはこれをしないのですか?for(int i = 0; i Pikoh

+3

「これ」とは何ですか?それは形ですか?また、 'Panel'や' GroupBox'のような他のコンテナの中にあるボタンはありますか? –

答えて

4

は使用しないでくださいマジックナンバー25)あなたはforループを主張した場合

Button[] buttons = this.Controls 
    .OfType<Button>() 
    .ToArray(); 

foreach (var button in buttons) { 
    button.FlatStyle = FlatStyle.Flat; 
    button.ForeColor = Color.Red; 
} 

実際配列の長さ、buttons.Lengthを何卒ご了承下さい) forループステートメント内の配列の長さは、範囲外の例外を防止する必要があります。

Button[] buttons = this.Controls.OfType<Button>().ToArray(); 
    for (int i = 0; i < buttons.Length; i++) 
    { 
    buttons[i].FlatStyle = FlatStyle.Flat; 
    buttons[i].ForeColor = Color.Red; 
    } 
+0

私はグループボックスコンテナを使用しています..大きな違いがありますか? –

+0

@Frank gagui:いいえ、おそらくあなたは* Linq *を少し変更したいと思うでしょう(例えば、ボタンのすべてではなく、グループボックス内でのみ) –

関連する問題