2009-12-01 5 views
0

Pourquoi est-ce que je ne peux pas accéder au tabcontrol à partir de myclass.cs?accéder à tabcontrol à partir myclass.cs

Le tabcontrol est dans form1.cs et mon code qui tente de créer une nouvelle page est dans myclass.cs. J'ai même essayé de placer la propriété de tabcontrol au public mais cela n'a pas fonctionné.

Répondre

0

juste modifiez le modificateur sur le contrôle pour public.

Une fois que vous faites cela et que vous avez Formulaire myForm = new Form();

vous serez en mesure de le faire:

myForm.myTAB.TabPages.Add (myTabPage);

(Vous devrez créer TabPage bien sûr.

+0

Je l'ai déjà fait, comme je l'ai dit dans ma question. –

+0

Alors? quel est le problème ? Je l'ai fait sur un projet de test et ça marche! – Dani

0

Je vous suggère d'envelopper le TabControl dans une propriété readonly public sur le fichier behind du formulaire, plutôt que de faire le contrôle public lui-même. Juste pour le plaisir de la sécurité de code (comme être en mesure de réattribuer votre TabControl à quelque chose de nouveau).

public TabControl MyTabControl { 
    get { 
    return privateTabControl; 
    } 
} 

aussi, ne pas oublier que vous aurez besoin d'une instance à votre formulaire en MyClass, sinon vous ne pouvez pas accéder aux membres de l'instance comme "MyTabControl" ou même les champs d'instances publiques si vous l'avez choisi

0

Je vous suggère d'incorporer une référence à TabControl sur le formulaire dans la classe myclass.cs.

Vous pouvez le faire en définissant un constructeur pour myclass qui a pris un paramètre TabControl en paramètre ou en définissant une propriété publique dans myClass qui contient une référence à un objet TabControl. Les deux méthodes sont illustrées ici:

public class myclass 
{ 
    // using "automatic" properties : requires C# 3.0 
    public TabControl theTabControl { get; set; } 

    // parameter-less 'ctor 
    public myclass() 
    { 

    } 

    // optional 'ctor where you pass in a reference to the TabControl 
    public myclass(TabControl tbControl) 
    { 
     theTabControl = tbControl; 
    } 

    // an example method that would add a new TabPage to the TabControl 
    public void addNewTabPage(string Title) 
    { 
     theTabControl.TabPages.Add(new TabPage(Title)); 
    } 
} 

Vous pouvez définir la référence TabControl de deux façons à partir du formulaire avec le TabControl:

myclass myclassInstance = new myClass(this.tabControl1); 

ou

myclass myclassInstance = new myClass(); 
// do some stuff 
// now set the TabControl 
myClassInstance.theTabControl = this.tabControl1; 

Une alternative est de exposer une propriété publique de type TabControl sur Form1: mais alors vous devez penser à comment myclass va "voir" l'instance "actuelle" de Form1 ... s'il y a plus d'une instance de Form1? Dans le cas où il y a un seul et unique TabControl, vous pouvez utiliser une propriété statique sur Form1 pour l'exposer.

Dans ce cas, "qui crée qui" devient intéressant: si le formulaire crée myclass; si myclass crée le formulaire; si myclass et le formulaire sont créés par une autre entité dans l'application: je pense que tous ces "vecteurs" porteront sur la meilleure technique à appliquer.

+0

Cela peut devenir un peu compliqué quand vous voulez référencer plus de commandes que seulement le tabcontrol de myclass.cs – Webleeuw

+0

@Webleeuw Je réponds juste à la question de l'affiche "comme demandé": Je vous prédis et je serais d'accord que si "myclass "besoin d'interagir (gérer les événements, modifier, accéder aux propriétés, autoriser un" quelconque "externe pour définir les propriétés internes, etc.) avec BEAUCOUP de contrôle sur des Formulaires spécifiques (ou avec des objets ou du code dans des Formulaires externes ou classes, bibliothèques de classes, etc.) une stratégie de programmation différente serait nécessaire. meilleur, – BillW

0

Créez-vous une instance de form1 dans myclass.cs et vérifiez-vous l'existence de tabControl sur cette instance? Si vous voulez accéder à form1.tabControl dans myclass.cs, vous devrez créer tabControl en tant que static public dans form1.cs

0

Ceci pourrait être une suggestion trop simple, et vous l'avez probablement déjà résolu, mais avez-vous pensé à inclure using System.Windows.Forms en haut du fichier de classe? Visual Studio peut ne pas inclure automatiquement cette référence lors de l'ajout d'un nouveau fichier de classe.

Questions connexes