2016-03-31 14 views
1

コントロール:C#の場合、それぞれの私は私の公開をForm1()内のコードを持って

foreach (Control c in Controls) 
      { 
       if (c is CheckBox) 
       { 

       } 
      } 

私がチェックボックスのいずれかがクリックされたときにイベントをトリガされませんしているよ、それは問題ではありません。どれ。

An object reference is required for the non-static field, method, or property 'CheckBox.Checked'

はこれを回避する方法があります:そう、例えば:私はどのチェックボックスを指定したhaventので

if(CheckBox.Checked == True) { 
//do something to the checked checkbox 
} 

もちろん、これは、エラーがスローされますか?私は同じイベントを次のようなすべてのチェックボックスに適用しています:

if (TestBox.Checked == true) 
{//Do Something} 
else {//Do Something} 

if (TestBox2.Checked == true) 
{//Do Something} 
else {//Do Something} 

私のコードは非常に非効率です。

EDIT:この反復は唯一の偽== cb.Checked througループ、および他を無視....以下

foreach (var cb in Controls.OfType<CheckBox>()) 
     { 
      if (cb.Checked == false) 
      { 
       cb.BackgroundImage = Image.FromFile("M:\\Phase IX (Jeremy, Sandima)\\Icons\\ CheckboxUncheck_18x.png"); 
       cb.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 
       cb.FlatAppearance.BorderSize = 0; 
       // make all four (!) BackColors transparent! 
       cb.BackColor = System.Drawing.Color.Transparent; 
       cb.FlatAppearance.CheckedBackColor = Color.Transparent; 
       cb.FlatAppearance.MouseDownBackColor = Color.Transparent; 
      } 
      else 
      { 
       cb.BackgroundImage = Image.FromFile("M:\\Phase IX (Jeremy, Sandima)\\Icons\\CheckBox_18x.png"); 
       cb.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 
       cb.FlatAppearance.BorderSize = 0; 
       // make all four (!) BackColors transparent! 
       cb.BackColor = System.Drawing.Color.Transparent; 
       cb.FlatAppearance.CheckedBackColor = Color.Transparent; 
       cb.FlatAppearance.MouseDownBackColor = Color.Transparent; 
      } 
     } 

答えて

0

を単一のイベントを追加します。私のチェックボックスがリスト@rbaghbanliであることを意味するものではない

foreach(Control t in Ratingfields) 
     { 
      if (t.Enabled == false) 
      { 
       t.BackgroundImage = Image.FromFile("M:\\DisableBox_18x.png"); 
       t.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 

       if (((CheckBox)t).Checked == true) 
       { 
         t.BackgroundImage = Image.FromFile("M:\\RadioGreen_Disabled18x.png"); 
         t.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 
        } 
      } 

     } 
0

を参照してくださいコード:

List<CheckBox> cboxes = new List<CheckBox>(); 
cboxes.Add(cb1); 
cboxes.Add(cb2); 
... 
cboxes.Add(cbN); 
... 
if(cboxes.Any(b => b.Checked)) 
{ 
    ... 
} 

またあなたがにフックしますあなたのすべてのチェックボックスのonchangeイベント。

+0

:私は私がリストにそれらを作り、以下のように進め、自分のcheckchangedイベントで私の外観特性を離れ、代わりに私の無効ボタンこのプロセスを使用しました – Krono

0

@ rbaghbanliの答えが良いです、それはあなたの仕事を達成するための適切な方法です。私はちょうどあなたがエラーを得た理由を指摘したい:

あなたは

if(CheckBox.Checked == True) { 

を使うべきではありませんあなたは

if(((CheckBox)c).Checked == True) { 
+0

if(((CheckBox)Form1).Checked == True)エラー '現在のコンテキストにTrueが存在しません' – Krono

+0

1.なぜcをform1に変更したのですか? 2. True - > true – Zee

+0

typo - 何かを試していた。 – Krono

1

を使用しなければならないあなたが特定のタイプのコントロールを反復処理するためにLINQを使用することができますたとえば、すべてのチェックボックス:

foreach (var cb in Controls.OfType<CheckBox>()) { 
    if (cb.Checked) { 
     // Do something 
    } 
} 
+0

これは、最初の条件をループするだけです - 上記で編集した回答 – Krono

+0

@Kronoこれは非常に奇妙です - 条件の反対側はチェックボックスに当てはまるはずです。問題を解決できましたか? – dasblinkenlight

+0

残念ながら、残念ながら、私は今は大きな混乱としてコードを残しましたが、iveは無効なボタンに同じ概念を適用しました。 (cb。Enabled == false){// stuff}} 新しいクリーンテストプロジェクトでテストされていますが、エラーが発生しなくても通常のプロジェクトではうまくいきません。 – Krono

0

フォームに動的にチェックボックスを追加する場合や、手動で、ちょうど はこのスレッドと他の人からの概念を適用し、これを読んで、将来の人々のために、だから、それらのすべてに

Protected void check_checkchanged(object sender, changedeventargs e) 
{ 
var checkedbox = sender as CheckBox; 
//do something 
} 
関連する問題