[C#] Lancer une fonction quelque soit le sender ??
3 réponses
amplitude
Bonjour!
Alors voil=E0 : j'ai une form (form3) que je ne peux appeller que de 1=20
endroit (form1).
Les form1 contien un listview avec donc...une liste qui est remplis au=20
Load par une fonction LoadListe().
Pour mettre =E0 jour ma liste depuis ma form3, voil=E0 ce que je fais :
form3 =E0 en param=E8tre d'appel un "Perso.form1 sender"
je peux donc y faire ensuite un sender.LoadListe();
pour mettre ma liste =E0 jour.
Mais voil, je dois maintenant pourvoir faire la m=EAme chose, soit depuis=
=20
form1, mais aussi depuis form2 d'o=F9 je peux maintenant appeller form3..=
=2E
Je pr=E9cise que form2 contient aussi le LoadListe().
je pensait changer dans les paramtres du form3 pour mettre un "object=20
sender", avec 2 overload de parametres
1 avec "Perso.form1 sender"
et 1 avec "Perso.form2 sender"
Mais a ce moment l=E0, je ne sais pas comment attribuer =E0 sender le typ=
e
Dans le genre, voil=E0 ce que je voudrait faire :
sender.SetType(Perso.form1) dans le premier overload, et
sender.SetType(Perso.form2) dans le second...
J'esp=E8re m'=EAtre fait comprendre... merci =E0 touts! :)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Bacelar
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les classes Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-) -- Paul Bacelar
"amplitude" wrote in message news:clji8a$jru$ Bonjour!
Alors voilà : j'ai une form (form3) que je ne peux appeller que de 1 endroit (form1).
Les form1 contien un listview avec donc...une liste qui est remplis au Load par une fonction LoadListe().
Pour mettre à jour ma liste depuis ma form3, voilà ce que je fais :
form3 à en paramètre d'appel un "Perso.form1 sender" je peux donc y faire ensuite un sender.LoadListe(); pour mettre ma liste à jour.
Mais voil, je dois maintenant pourvoir faire la même chose, soit depuis form1, mais aussi depuis form2 d'où je peux maintenant appeller form3...
Je précise que form2 contient aussi le LoadListe().
je pensait changer dans les paramtres du form3 pour mettre un "object sender", avec 2 overload de parametres 1 avec "Perso.form1 sender" et 1 avec "Perso.form2 sender"
Mais a ce moment là, je ne sais pas comment attribuer à sender le type Dans le genre, voilà ce que je voudrait faire : sender.SetType(Perso.form1) dans le premier overload, et sender.SetType(Perso.form2) dans le second...
J'espère m'être fait comprendre... merci à touts! :)
Const.
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les classes
Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du
constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du
constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
--
Paul Bacelar
"amplitude" <news@ampBLOUdesign.net> wrote in message
news:clji8a$jru$1@apollon.grec.isp.9tel.net...
Bonjour!
Alors voilà : j'ai une form (form3) que je ne peux appeller que de 1
endroit (form1).
Les form1 contien un listview avec donc...une liste qui est remplis au
Load par une fonction LoadListe().
Pour mettre à jour ma liste depuis ma form3, voilà ce que je fais :
form3 à en paramètre d'appel un "Perso.form1 sender"
je peux donc y faire ensuite un sender.LoadListe();
pour mettre ma liste à jour.
Mais voil, je dois maintenant pourvoir faire la même chose, soit depuis
form1, mais aussi depuis form2 d'où je peux maintenant appeller form3...
Je précise que form2 contient aussi le LoadListe().
je pensait changer dans les paramtres du form3 pour mettre un "object
sender", avec 2 overload de parametres
1 avec "Perso.form1 sender"
et 1 avec "Perso.form2 sender"
Mais a ce moment là, je ne sais pas comment attribuer à sender le type
Dans le genre, voilà ce que je voudrait faire :
sender.SetType(Perso.form1) dans le premier overload, et
sender.SetType(Perso.form2) dans le second...
J'espère m'être fait comprendre... merci à touts! :)
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les classes Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-) -- Paul Bacelar
"amplitude" wrote in message news:clji8a$jru$ Bonjour!
Alors voilà : j'ai une form (form3) que je ne peux appeller que de 1 endroit (form1).
Les form1 contien un listview avec donc...une liste qui est remplis au Load par une fonction LoadListe().
Pour mettre à jour ma liste depuis ma form3, voilà ce que je fais :
form3 à en paramètre d'appel un "Perso.form1 sender" je peux donc y faire ensuite un sender.LoadListe(); pour mettre ma liste à jour.
Mais voil, je dois maintenant pourvoir faire la même chose, soit depuis form1, mais aussi depuis form2 d'où je peux maintenant appeller form3...
Je précise que form2 contient aussi le LoadListe().
je pensait changer dans les paramtres du form3 pour mettre un "object sender", avec 2 overload de parametres 1 avec "Perso.form1 sender" et 1 avec "Perso.form2 sender"
Mais a ce moment là, je ne sais pas comment attribuer à sender le type Dans le genre, voilà ce que je voudrait faire : sender.SetType(Perso.form1) dans le premier overload, et sender.SetType(Perso.form2) dans le second...
J'espère m'être fait comprendre... merci à touts! :)
Const.
amplitude
Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form... pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les c lasses Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form...
pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les c lasses
Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du
constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du
constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form... pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les c lasses Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
Paul Bacelar
1)
Form1 et Form2 sont bien des forms, donc c'est suffisant pour qu'elles dérivent de la même classe.
public abstract class Form0 : System.Windows.Forms.Form { public Form0(){} public abstract void LoadListe(); }
public class Form1 : Form0 { public Form1(){} public override void LoadListe(){/*implementation Form1*/} }
public class Form2 : Form0 { public Form2(){} public override void LoadListe(){/*implementation Form2*/} }
public class Form3 : System.Windows.Forms.Form { Form0 sender; public Form3(Form0 a_sender){sender = a_sender;} public void myMethode(){sender.LoadListe();} }
... = new Form3(new Form1();); ... = new Form3(new Form2(););
2) public interface ILoadListe { void LoadListe(); }
public class Form1 : System.Windows.Forms.Form ,ILoadListe { public Form1(){} public void LoadListe(){/*implementation Form1*/} }
public class Form2 : System.Windows.Forms.Form ,ILoadListe { public Form2(){} public void LoadListe(){/*implementation Form2*/} }
public class Form3 : System.Windows.Forms.Form { ILoadListe sender; public Form3(ILoadListe a_sender){sender = a_sender;} public void myMethode(){sender.LoadListe();} }
... = new Form3(new Form1();); ... = new Form3(new Form2(););
Comme vous pouvez le voir, avec les deux solutions, Form3 n'est plus dépendant des types Form1 et Form2 mais uniquement de Form0 ou de ILoadListe. Il n'a pas à connaître le type de sender mais seulement qu'il peut appeler la méthode LoadListe sur cet objet.
Ainsi pour avoir un troisième type de formulaire "sender", vous dérivé de Form0 une troisième classe ou vous implémentez l'interface ILoadListe dans cette même classe (pas les 2 à la fois). Et c'est tout, vous ne touchez pas du tout à la classe Form3 car, pour elle, que cela soit un nouveau type de sender ne la trouble pas car elle sait que son sender à une méthode LoadListe.
C'est une des applications les plus simples du polymorphisme.
Essayez l'une des 2 méthodes et vous verrez que c'est ultrasimple à étendre comme architecture.
-- Paul Bacelar
"amplitude" wrote in message news:clk37h$opc$ Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form... pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les
classes
Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
1)
Form1 et Form2 sont bien des forms, donc c'est suffisant pour qu'elles
dérivent de la même classe.
public abstract class Form0 : System.Windows.Forms.Form
{
public Form0(){}
public abstract void LoadListe();
}
public class Form1 : Form0
{
public Form1(){}
public override void LoadListe(){/*implementation Form1*/}
}
public class Form2 : Form0
{
public Form2(){}
public override void LoadListe(){/*implementation Form2*/}
}
public class Form3 : System.Windows.Forms.Form
{
Form0 sender;
public Form3(Form0 a_sender){sender = a_sender;}
public void myMethode(){sender.LoadListe();}
}
... = new Form3(new Form1(););
... = new Form3(new Form2(););
2)
public interface ILoadListe
{
void LoadListe();
}
public class Form1 : System.Windows.Forms.Form ,ILoadListe
{
public Form1(){}
public void LoadListe(){/*implementation Form1*/}
}
public class Form2 : System.Windows.Forms.Form ,ILoadListe
{
public Form2(){}
public void LoadListe(){/*implementation Form2*/}
}
public class Form3 : System.Windows.Forms.Form
{
ILoadListe sender;
public Form3(ILoadListe a_sender){sender = a_sender;}
public void myMethode(){sender.LoadListe();}
}
... = new Form3(new Form1(););
... = new Form3(new Form2(););
Comme vous pouvez le voir, avec les deux solutions, Form3 n'est plus
dépendant des types Form1 et Form2 mais uniquement de Form0 ou de
ILoadListe. Il n'a pas à connaître le type de sender mais seulement qu'il
peut appeler la méthode LoadListe sur cet objet.
Ainsi pour avoir un troisième type de formulaire "sender", vous dérivé de
Form0 une troisième classe ou vous implémentez l'interface ILoadListe dans
cette même classe (pas les 2 à la fois). Et c'est tout, vous ne touchez pas
du tout à la classe Form3 car, pour elle, que cela soit un nouveau type de
sender ne la trouble pas car elle sait que son sender à une méthode
LoadListe.
C'est une des applications les plus simples du polymorphisme.
Essayez l'une des 2 méthodes et vous verrez que c'est ultrasimple à étendre
comme architecture.
--
Paul Bacelar
"amplitude" <news@ampBLOUdesign.net> wrote in message
news:clk37h$opc$1@aphrodite.grec.isp.9tel.net...
Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form...
pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les
classes
Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du
constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du
constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)
Form1 et Form2 sont bien des forms, donc c'est suffisant pour qu'elles dérivent de la même classe.
public abstract class Form0 : System.Windows.Forms.Form { public Form0(){} public abstract void LoadListe(); }
public class Form1 : Form0 { public Form1(){} public override void LoadListe(){/*implementation Form1*/} }
public class Form2 : Form0 { public Form2(){} public override void LoadListe(){/*implementation Form2*/} }
public class Form3 : System.Windows.Forms.Form { Form0 sender; public Form3(Form0 a_sender){sender = a_sender;} public void myMethode(){sender.LoadListe();} }
... = new Form3(new Form1();); ... = new Form3(new Form2(););
2) public interface ILoadListe { void LoadListe(); }
public class Form1 : System.Windows.Forms.Form ,ILoadListe { public Form1(){} public void LoadListe(){/*implementation Form1*/} }
public class Form2 : System.Windows.Forms.Form ,ILoadListe { public Form2(){} public void LoadListe(){/*implementation Form2*/} }
public class Form3 : System.Windows.Forms.Form { ILoadListe sender; public Form3(ILoadListe a_sender){sender = a_sender;} public void myMethode(){sender.LoadListe();} }
... = new Form3(new Form1();); ... = new Form3(new Form2(););
Comme vous pouvez le voir, avec les deux solutions, Form3 n'est plus dépendant des types Form1 et Form2 mais uniquement de Form0 ou de ILoadListe. Il n'a pas à connaître le type de sender mais seulement qu'il peut appeler la méthode LoadListe sur cet objet.
Ainsi pour avoir un troisième type de formulaire "sender", vous dérivé de Form0 une troisième classe ou vous implémentez l'interface ILoadListe dans cette même classe (pas les 2 à la fois). Et c'est tout, vous ne touchez pas du tout à la classe Form3 car, pour elle, que cela soit un nouveau type de sender ne la trouble pas car elle sait que son sender à une méthode LoadListe.
C'est une des applications les plus simples du polymorphisme.
Essayez l'une des 2 méthodes et vous verrez que c'est ultrasimple à étendre comme architecture.
-- Paul Bacelar
"amplitude" wrote in message news:clk37h$opc$ Oui, tout nouveau, et surtout dans la programmation autre que PHP :))
Tellement que je n'ai rien compris! :-|
Form1 et 2 sont trop différente je pense pour dérivées d'une autre Form... pour la liste, je n'ai pas compris :(
Paul Bacelar wrote:
Vous êtes nouveau dans le monde de l'objet ;-)
Je vous propose 2 solutions:
1) héritages
Form1 et Form2 dériverons de From0 qui dérivera de Form;
Form0 aura un méthode abstraite "abstract void LoadListe()" que les
classes
Form1 et Form2 redéfiniront avec un "override void LoadListe()"
Votre champ sender sera de type Form0 ainsi que le paramètre du constructeur.
2) Interface
Vous définissez une Interface ILoadListe{ void LoadListe();}
Form1 et Form2 implémente cette interface.
Votre champ sender sera de type ILoadListe ainsi que le paramètre du constructeur.
Pas d'overload, pas de gestion de type, pas de prise de tête ;-)