2

簡単そうに見える質問に答えが見つからない。フォーム上のコントロールを反復処理する必要があり、コントロールが CheckBox であり、チェックされている場合、特定のことを行う必要があります。このようなもの

foreach (Control c in this.Controls)
        {
            if (c is CheckBox)
            {
                if (c.IsChecked == true)
                    // do something
            }
        }

しかし、IsChecked プロパティにアクセスできません。

エラーは、'System.Windows.Forms.Control' に 'IsChecked' の定義が含まれておらず、タイプ 'System.Windows.Forms.Control' の最初の引数を受け入れる拡張メソッド 'IsChecked' が見つかりませんでした (不足していますか? using ディレクティブまたはアセンブリ参照?)

どうすればこの物件にたどり着けますか? よろしくお願いします!

編集

さて、すべてに答えるために-キャストを試みましたが、うまくいきません。

4

5 に答える 5

5

あなたは近くにいます。お探しの物件はチェック済みです

foreach (Control c in this.Controls) {             
   if (c is CheckBox) {
      if (((CheckBox)c).Checked == true) 
         // do something             
      } 
} 
于 2011-04-05T07:04:45.987 に答える
2

チェックボックスにキャストする必要があります。

foreach (Control c in this.Controls)
        {
            if (c is CheckBox)
            {
                if ((c as CheckBox).IsChecked == true)
                    // do something
            }
        }
于 2011-04-05T07:01:42.083 に答える
1

コントロールをキャストする必要があります。

    foreach (Control c in this.Controls)
    {
        if (c is CheckBox)
        {
            if (((CheckBox)c).IsChecked == true)
                // do something
        }
    }
于 2011-04-05T07:02:56.873 に答える
1

Control クラスはプロパティを定義しないため、IsChecked最初に適切な型にキャストする必要があります。

var checkbox = c as CheckBox;
if( checkbox != null )
{
    // 'c' is a CheckBox
    checkbox.IsChecked = ...;
}
于 2011-04-05T07:07:27.470 に答える
1

Control から CheckBox へのキャストを追加する必要があります。

foreach (Control c in this.Controls)
        {
            if (c is CheckBox)
            {
                if ((c as CheckBox).IsChecked == true)
                    // do something
            }
        }
于 2011-04-05T07:02:15.000 に答える