2017-12-02 3 views
-1

アプリケーションのすべてのフォームのコントロールのバックカラーを変更しようとしています。これは私のコードです:背景色を変更するために、フォームのコントロールから別のクラスに到達するにはどうすればいいですか?

foreach (Control item in Controls) 
{ 
    if (item is ComboBox) 
    { 

    } 
    else 
    { 
     item.BackColor = Color.White; 
    } 
} 
BackColor = Color.White; 

問題は、コントロールとforeach文で、BackColorプロパティは、フォームではなくクラスで問題なく動作しますが、彼らは動作しません。どのようにしてフォームのすべてのコントロールを取得し、BackColorsをこのようなコードのクラスから変更できますか?それとも解決策として何か提案がありますか?

+1

このクラスのメソッドを呼び出します。 – Steve

+1

この質問には10,000以上の重複があります。 –

+0

私はそれが非常に多くの重複を持っていることを知っていますが、私は少なくとも1時間それを検索したが、私は自分のコードでそれらを使用することができませんでした。フォームリファレンスを渡すことについて何も見つけることができなかったので、私はこの質問をしました。スティーブのおかげで、今私はそれを知っている。 – HeroOfSkies

答えて

3

あなたのクラスにはChangeBackgroundColorという名前のメソッドがあると仮定して、このメソッドのフォーム参照をパラメータとして渡して、コントロールの背景色を変更する任意のフォームからこのメソッドを呼び出すことができます。あなたのいずれかの形式を内部

public class MyClass 
{ 
    public void ChangeBackgroundColor(Form f) 
    { 
     foreach (Control item in f.Controls) 
     { 

      if (item is ComboBox) 
      { 

      } 
      else 
      { 
       item.BackColor = Color.White; 
      } 
     } 
     f.BackColor = Color.White; 
    } 
} 

そして、あなたはいつも色を変更するクラスメソッドへのフォームの参照を渡すことができ

public class Form1:Form 
{ 
    public Form1() 
    { 
     InitializeComponents(); 
     MyClass c = new MyClass(); 
     c.ChangeBackgroundColor(this); 
    } 
} 
+0

@HeroOfSkies将来的には、単純なGoogle検索や、別のクラスや親クラスのクラスメソッドを呼び出すことについて試したことを示すことができます。ありがとう – MethodMan

+0

私はすでに質問の下のコメントのGoogle検索について回答しましたが、2番目の部分はアドバイスをいただきありがとうございます – HeroOfSkies

関連する問題