2017-10-17 5 views
-2

J'essaie de diviser mon programme en classes pour réduire l'encombrement et augmenter la lisibilité.C# WinForms 'this.Controls.Find' dans une classe séparée

Dans l'une de mes méthodes, j'ai besoin de trouver l'emplacement d'une étiquette sur l'écran.

this.Controls.Findthis.Controls.Find travaillé avant de tout déplacer dans des classes séparées, mais il n'existe plus car je ne l'exécute plus dans la même classe que les contrôles. J'ai essayé Main.Controls.Find (Main.cs est l'endroit où mon formulaire est exécuté et mis en place) mais cela n'a pas fonctionné et j'ai reçu l'erreur "Une référence d'objet est requise pour le champ non statique, la méthode ou la propriété". Commandes '"

Comment faire référence aux commandes? Dois-je ajouter une instruction using using?

Merci,

Josh

+1

Vous avez besoin d'une référence à l'objet de formulaire. Facile à l'intérieur de la classe, pas si facile quand vous le déplacez. Pensez à le passer par le constructeur. –

+0

En savoir plus sur ['Class'] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes) et créer des instances d'objet. –

Répondre

0

Vous souhaitez créer une référence à la forme, transmise à la méthode nouvellement introduite (ou classe).

Avant

public class Main : Form { 

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

Après

public class Main : Form { 

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

public class Helpers { 

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

ou

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

Merci Wiktor ... –