OVH Cloud OVH Cloud

Gerer le Click du UsreControl dans le ParentForm

5 réponses
Avatar
TCHEKOUTEU
Bonjour,

j'ai developpé un contrôle personnalisé.
je souhaite que l'évènement Click d'un bouton particulier du UserControl
soit plutôt géré dans le ParentForm.
par exemple :

private void btnTest_Click(object sender, event....)
{
myForm frmM = new myForm ();
frmM.ShowDialog();
}

Le problème est que myForm sera différent selon le Contexte, je ne peux donc
pas l'implémenter à partir du UserControl. je souhaite pouvoir remplacer
"myForm" par "myForm2" ou "myForm3" selon le Contexte. Dans le formulaire
parent.

Je ne vois pas comment procéder.

Merci à quiconque me mettra sur la piste.

5 réponses

Avatar
Zoury
Salut!

je ne peux donc pas l'implémenter à partir du UserCon



Tu pourrais déclencher un événement qui serait gèrer par ton formulaire
parent.

--
Cordialement
Yanick
MVP pour Visual Basic

"TCHEKOUTEU" a écrit dans le message de
news:O2w9j$
Bonjour,

j'ai developpé un contrôle personnalisé.
je souhaite que l'évènement Click d'un bouton particulier du UserControl
soit plutôt géré dans le ParentForm.
par exemple :

private void btnTest_Click(object sender, event....)
{
myForm frmM = new myForm ();
frmM.ShowDialog();
}

Le problème est que myForm sera différent selon le Contexte, je ne peux


donc
pas l'implémenter à partir du UserControl. je souhaite pouvoir remplacer
"myForm" par "myForm2" ou "myForm3" selon le Contexte. Dans le formulaire
parent.

Je ne vois pas comment procéder.

Merci à quiconque me mettra sur la piste.




Avatar
TCHEKOUTEU
J'entrevois effectivement à travers ta reponse une piste à exploiter.

en attendant, Si quelqu'un a d'autres idées, je suis preneur.

Merci.


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut!

> je ne peux donc pas l'implémenter à partir du UserCon

Tu pourrais déclencher un événement qui serait gèrer par ton formulaire
parent.

--
Cordialement
Yanick
MVP pour Visual Basic

"TCHEKOUTEU" a écrit dans le message de
news:O2w9j$
> Bonjour,
>
> j'ai developpé un contrôle personnalisé.
> je souhaite que l'évènement Click d'un bouton particulier du UserControl
> soit plutôt géré dans le ParentForm.
> par exemple :
>
> private void btnTest_Click(object sender, event....)
> {
> myForm frmM = new myForm ();
> frmM.ShowDialog();
> }
>
> Le problème est que myForm sera différent selon le Contexte, je ne peux
donc
> pas l'implémenter à partir du UserControl. je souhaite pouvoir remplacer
> "myForm" par "myForm2" ou "myForm3" selon le Contexte. Dans le


formulaire
> parent.
>
> Je ne vois pas comment procéder.
>
> Merci à quiconque me mettra sur la piste.
>
>




Avatar
Simon Mourier [MS]
Utiliser les évènements est à priori la bonne façon de faire. En général, un
contrôle ne peut présumer quoique ce soit de son conteneur / parent, si ce
n'est les méthodes standards, etc...
Les évènements sont justement le moyen de communiquer avec le reste du
monde. Tous les contrôles fournis en standard fonctionnent selon ce
principe.

Simon.

"TCHEKOUTEU" a écrit dans le message de news:

J'entrevois effectivement à travers ta reponse une piste à exploiter.

en attendant, Si quelqu'un a d'autres idées, je suis preneur.

Merci.


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut!

> je ne peux donc pas l'implémenter à partir du UserCon

Tu pourrais déclencher un événement qui serait gèrer par ton formulaire
parent.

--
Cordialement
Yanick
MVP pour Visual Basic

"TCHEKOUTEU" a écrit dans le message de
news:O2w9j$
> Bonjour,
>
> j'ai developpé un contrôle personnalisé.
> je souhaite que l'évènement Click d'un bouton particulier du
> UserControl
> soit plutôt géré dans le ParentForm.
> par exemple :
>
> private void btnTest_Click(object sender, event....)
> {
> myForm frmM = new myForm ();
> frmM.ShowDialog();
> }
>
> Le problème est que myForm sera différent selon le Contexte, je ne peux
donc
> pas l'implémenter à partir du UserControl. je souhaite pouvoir
> remplacer
> "myForm" par "myForm2" ou "myForm3" selon le Contexte. Dans le


formulaire
> parent.
>
> Je ne vois pas comment procéder.
>
> Merci à quiconque me mettra sur la piste.
>
>








Avatar
Pierre [SELF-INFORMATIQUE]
Finalement j'ai trouvé.
Ceci consiste à :
Rendre public sur le UserControl les Boutons dont on souhaite gérer les
Click plus tard et ne rien faire d'autre.
ensuite Sur le formulaire parent, accéder à ce bouton à travers une instance
du UserControl et gérer les méthodes et évènements comme dans les cas
classiques.

Merci de votre contribution sans laquelle je n'aurais pas trouvé cette
solution.



"Simon Mourier [MS]" a écrit dans le message
de news:
Utiliser les évènements est à priori la bonne façon de faire. En général,


un
contrôle ne peut présumer quoique ce soit de son conteneur / parent, si ce
n'est les méthodes standards, etc...
Les évènements sont justement le moyen de communiquer avec le reste du
monde. Tous les contrôles fournis en standard fonctionnent selon ce
principe.

Simon.

"TCHEKOUTEU" a écrit dans le message de news:

> J'entrevois effectivement à travers ta reponse une piste à exploiter.
>
> en attendant, Si quelqu'un a d'autres idées, je suis preneur.
>
> Merci.
>
>
> "Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
> news:
>> Salut!
>>
>> > je ne peux donc pas l'implémenter à partir du UserCon
>>
>> Tu pourrais déclencher un événement qui serait gèrer par ton formulaire
>> parent.
>>
>> --
>> Cordialement
>> Yanick
>> MVP pour Visual Basic
>>
>> "TCHEKOUTEU" a écrit dans le message de
>> news:O2w9j$
>> > Bonjour,
>> >
>> > j'ai developpé un contrôle personnalisé.
>> > je souhaite que l'évènement Click d'un bouton particulier du
>> > UserControl
>> > soit plutôt géré dans le ParentForm.
>> > par exemple :
>> >
>> > private void btnTest_Click(object sender, event....)
>> > {
>> > myForm frmM = new myForm ();
>> > frmM.ShowDialog();
>> > }
>> >
>> > Le problème est que myForm sera différent selon le Contexte, je ne


peux
>> donc
>> > pas l'implémenter à partir du UserControl. je souhaite pouvoir
>> > remplacer
>> > "myForm" par "myForm2" ou "myForm3" selon le Contexte. Dans le
> formulaire
>> > parent.
>> >
>> > Je ne vois pas comment procéder.
>> >
>> > Merci à quiconque me mettra sur la piste.
>> >
>> >
>>
>>
>
>




Avatar
Zoury
Salut! :O)

Rendre public sur le UserControl les Boutons dont on souhaite gérer les
Click plus tard et ne rien faire d'autre.
ensuite Sur le formulaire parent, accéder à ce bouton à travers une


instance
du UserControl et gérer les méthodes et évènements comme dans les cas
classiques.



C'est amha, une très mauvaise idée. Les boutons contenu sur ton UserControl
ne devrait être accessible qu'à
ce UserControl (et éventuellement à toutes les classe qui en hériteront),
c'est le concept de l'encapsulation. Cela évite du code "spaghetti", rend le
code plus réutilisable, en plus d'éviter aux autres codeurs l'accès à des
objets auxquels ils ne devraient même pas avoir connaissance.

Pourquoi ne veux-tu pas simplement utiliser un événement comme proposé plus
tôt cette semaine ?

tu déclares un événement public dans ton UserControl :
//***
public event EventHandler TestClick = null;
//***

tu l'appelles dans le click du bouton :
//***
public void btnTest_Click(object sender, EventArgs args)
{
if (TestClick != null)
TestClick(this, new EventArgs());
}
//***



Tu peux même utiliser une classe dérivée de EventArgs afin d'échanger de
l'information entre la classe implémentant ton événement et ta classe.

ex :
on créer une classe dérivée d'EventArgs contenant les renseignements,
concernant l'événement, à échanger d'une classe à l'autre
//***
public class TestClickEventArgs : EventArgs
{
private bool _cancel = false;
public bool Cancel
{
get {return _cancel;}
set {_cancel = value;}
}
}
//***

on déclare une delegate public dans ton UserControl utilisant cette classe
en paramètre :
//***
public delegate void TestClickEventHandler (object sender,
TestClickEventArgs args);
//***

tu déclares un événement public dans ton UserControl :
//***
public event TestClickEventHandler TestClick = null;
//***

tu l'appelles dans le click du bouton de ton UserControl :
//***
public void btnTest_Click(object sender, EventArgs args)
{
if (TestClick != null)
{
CancelableEventArgs args = new CancelableEventArgs();
TestClick(this, args);
Console.WriteLine("cancel = {0}", args.Cancel);
}
}
//***

tu l'utiliserais ainsi dans ton formulaire :
//***
protected MyUserControl usrCtl = new MyUserControl();

private void Form1_Load(object sender, System.EventArgs e)
{
usrCtl.TestClick += new CancelableEventHandler(usrCtl_TestClick);
}
private void usrCtl_TestClick(object sender, CancelableEventArgs args)
{
args.Cancel = true;
}
//***


--
Cordialement
Yanick
MVP pour Visual Basic