Comment accéder à un Parent de la classe de fonction/de contrôle de la part d'un enfant de contrôle de l'utilisateur chargé dans un panneau
J'ai du Formulaire Principal qui contient un Panneau qui charge différents Usercontrol dans le panneau.
Maintenant, j'ai besoin d'accéder à des fonctions dans le Formulaire Principal de l'objet UserControl.
Ci-dessous, j'ai donné mon code;
C'est ma principale classe de formulaire Windows:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
loadlogin();
}
private void loadlogin()
{
login log = new login();
mainPannel.Controls.Clear();
mainPannel.Controls.Add(log);
}
public void mytest()
{
}
}
Comme vous pouvez le voir je suis le chargement d'un usercontrol à la mainPannel.
Regardons maintenant le contrôle usercontrol:
public partial class login : UserControl
{
string MyConString = "";
public login()
{
InitializeComponent();
}
public void button1_Click_1(object sender, EventArgs e)
{
//I want to call the parent function mytest(); HOW????
}
}
Je veux accéder à mytest() fonction lorsque button1 nous a cliqué. J'ai essayé beaucoup d'autres solution mais je suis encore confus.
J'ai utilisé:
Form my = this.FindForm();
my.Text = "asdasfasf";
Cela me donne une référence pour les parents et je peux changer la forme de texte, mais comment puis-je accéder à ses fonctions???
my.Text
modificateurs de la propriété publique?OriginalL'auteur Surja | 2013-03-31
Vous devez vous connecter pour publier un commentaire.
Cela peut aide:
Et
si cela fonctionne. Vous pouvez marquer la réponse Acceptée.
Étroitement couplage d'un UserControl à son parent par la déclaration d'une référence pour le type parent est franchement horrible de codage. Il élimine complètement à peu près de tout avantage de l'utilisation d'un UserControl, en premier lieu, parce qu'il ne peut jamais exister indépendamment de son parent. Même si vous créez constructeurs surchargés pour permettre la transmission "Parent" Formes de différents types, vous n'auriez toujours avoir à modifier le code CHAQUE FOIS que vous voulez placer la commande sur un autre type parent. Faites-vous une faveur...ignorer cette réponse et d'apprendre des événements
OriginalL'auteur Hossein Narimani Rad
Ok, la réponse ci-dessus fonctionne, mais ça n'est pas les bonnes pratiques de codage à passer dans un "Formulaire Parent" à un contrôle utilisateur. Les contrôles utilisateur doit être situé dans un projet séparé de votre projet de formulaires et des formulaires de projet devrait faire référence à votre projet de contrôle afin de gagner visiblity. Disons par exemple que vous souhaitez que cette UserControl pour être imbriqué dans un autre UserControl à un certain point. Votre code ne fonctionne plus sans surcharger le constructeur. La meilleure solution serait d'utiliser un événement. J'ai fourni une mise en œuvre à l'aide d'un CustomEventArg. En faisant cela, votre connexion UserControl peut s'asseoir sur quoi que ce soit et encore du travail. Si la fonctionnalité permettant de modifier les parents de texte n'est pas exigé, il suffit de ne pas s'inscrire à l'événement. Voici le code, j'espère que ça aide quelqu'un.
Voici le code du formulaire:
Ici est le "login" code UserControl (dans mon test de la solution, juste un userControl avec un bouton)
Et enfin, la CustomEventArgs classe:
L'écriture de vos commandes de cette façon, pas de visibilité à des Formes de permettre à votre UserControls être complètement réutilisable et qui n'est pas lié à n'importe quel type ou genre de parents. Il vous suffit de définir les comportements d'un contrôle utilisateur peut déclencher et les faire enregistrer lorsque cela est nécessaire. Je sais que c'est un vieux post mais j'espère que cela va aider quelqu'un à mieux écrire UserControls.
OriginalL'auteur Scope Creep
De votre UserControl:
OriginalL'auteur Jaime Oliveira