2017-10-17 7 views
-2

私のプログラムをクラスに分割して混乱を減らし、読みやすさを向上させようとしています。C#WinForms 'this.Controls.Find'は別のクラスにあります

私の方法の1つでは、画面上にラベルの場所を見つける必要があります。

this.Controls.Find私はすべてを別々のクラスに移動しましたが、もはやコントロールと同じクラスでそれを実行しないため、もう存在しません。私はMain.Controls.Findを試しました(Main.csは私のフォームが実行され、設定されたところですが)。これもうまくいかず、 "オブジェクト参照は非静的なフィールド、メソッド、またはプロパティのコントロールに必要です。コントロール ""

コントロールをどのように参照しますか?追加のusingステートメントを追加する必要はありますか?

おかげで、

ジョシュ

+1

した後、フォームオブジェクトへの参照を必要としています。クラス内で簡単に、あなたがそれを移動するときには簡単ではありません。それをコンストラクタに渡すことを検討してください。 –

+0

['Class'](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes)の詳細とオブジェクトインスタンスの作成を参照してください。 –

答えて

0

あなたは、新たに導入されたメソッド(またはクラス)に渡さフォームへ参照を、必要とします。

public class Main : Form { 

    public void Whatever() { 
     ... 
     this.Controls.Find(...); 
    } 
} 

public class Main : Form { 

    public void Whatever() { 
     ... 
     new Helpers().HelperMethod(this); 
    } 
} 

public class Helpers { 

    public void HelperMethod(Form form) { 
     ... 
     form.Controls.Find 
    } 
} 

または

public class Main : Form { 

    public void Whatever() { 
     ... 
     new Helpers(this).HelperMethod(); 
    } 
} 

public class Helpers { 

    private Form Form { get; set; } 
    public Helpers(Form form) { 
     this.Form = form; 
    } 

    public void HelperMethod() { 
     ... 
     this.Form.Controls.Find 
    } 
} 
+0

ありがとうWiktor ... –

関連する問題