2017-10-17 2 views
-2

Ich versuche, mein Programm in Klassen zu teilen, um Unordnung zu reduzieren und die Lesbarkeit zu erhöhen.C# WinForms 'this.Controls.Find' in einer separaten Klasse

In einer meiner Methoden muss ich den Ort eines Etiketts auf dem Bildschirm finden.

this.Controls.Find hat funktioniert, bevor ich alles in separate Klassen verschoben habe, aber es existiert nicht mehr, weil ich es nicht mehr in der gleichen Klasse wie die Steuerelemente ausführe. Ich versuchte Main.Controls.Find (Main.cs ist, wo mein Formular ausgeführt wird und dargelegt), aber das hat auch nicht funktioniert, und ich habe den Fehler, "Eine Objektreferenz ist für das nicht statische Feld, Methode oder Eigenschaft erforderlich" Control. Controls '"

Wie kann ich die Steuerelemente referenzieren? Muss ich eine zusätzliche using-Anweisung hinzufügen?

Danke,

Josh

+1

Sie müssen einen Verweis auf das Formular-Objekt. Einfach in der Klasse, nicht so einfach, wenn Sie es bewegen. Überlegen Sie, ob Sie den Konstruktor übergeben. –

+0

Lesen Sie mehr über ['Class'] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes) und erstellen Sie Objektinstanzen. –

Antwort

0

Sie benötigen eine Referenz auf die Form, zu dem neu eingeführten Verfahren (oder Klasse) weitergegeben.

Vor

public class Main : Form { 

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

Nach

public class Main : Form { 

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

public class Helpers { 

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

oder

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

Danke Wiktor ... –

Verwandte Themen