3

チェックボックスとラベルを含むパネルがあり、ボタンをクリックしたときにチェックボックスのすべてのチェック状態を変更したいと考えています。

foreach (object x in panel1.Controls)
        {
            if (x.GetType() == typeof(CheckBox))
            {
                x.Checked = false; // problem is here;
                // (CheckBox)x.Checked = false; // also didn't work
            }
        }

単純なことだと確信していますが、問題を解決する方法が見つかりませんでした。私はvb.netで同じ手順を書くことができましたが、それを使いたくありません

4

5 に答える 5

7

キャスト操作全体を括弧で囲む必要があります。

((CheckBox)x).Checked = false;
于 2012-04-26T18:11:16.443 に答える
6

コードを少しクリーンアップすることは間違いありません (また、括弧の問題を解決することもできます)。

foreach(var x in panel1.Controls)
{
    var checkbox = x as Checkbox;
    if(checkbox != null) checkbox.Checked = false;
}
于 2012-04-26T18:12:23.410 に答える
3
foreach(Checkbox box in panel1.Controls.OfType<CheckBox>())
{
  box.Checked = true;
}
于 2012-04-26T18:18:50.083 に答える
2

試す

((CheckBox)x).Checked = false;

あなたが書いたように、コンパイラは理解します

(CheckBox)(x.Checked) = false;
于 2012-04-26T18:12:16.133 に答える
0

x はまだオブジェクトなので、オブジェクトをチェックボックスにキャストする必要があります

((Checkbox)x).Checked = false;
于 2012-04-26T18:12:09.277 に答える