En tant que contributeur, je n'ai pas exactement la même présentation que toi.
Du coup, pas certain de t'indiquer correctement
En bas du premier message, j'ai le bouton résolu, sinon dans les 3 points à droite, ou encore dans la roue crantée en haut
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Bonjour
dans ce view source, Bidou montre comment utiliser les événements
https://codes-sources.commentcamarche.net/source/26735-passage-de-parametres
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
PS: pour tes prochains posts, merci d'utiliser la coloration syntaxique comme.décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Bonjour et merci Whismeril;
je connais la mécanique de passages de param d'une WinForm à une autre ....
Le lien que tu envoie est bien construit et exemplaire.
C'est ce que j'applique .... à part que moi je déclare le délégué dans le NameSpace et non dans une Classe.
Est ce important ? Je ne sais pas !!!!
Par contre , la déclaration des évènements se fait toujours dans la Classe.
C'est beau mais ca ne résout pas mon problème.
Relis mon post et trouve mon erreur ...
Merci de ta réponse
Ici
public EventHandler event_momo; // déclaration de l'évènement
Contrairement à ce que dit ton commentaire tu ne déclares pas un événement mais un objet de type EventHandler.
Un événement est de type event avec délégué
public event EventHandler event_momo; // déclaration de l'évènement
Plus bas, eh ne sert à rien, tu peux écrire comme ça
event_momo?.Invoke(this, EventArgs.Empty)
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Par contre EventHandler est un délégué par défaut, si tu l'as overridé ça peut peut-être aussi générer un conflit.
Je n'ai jamais essayé, dans le doute.
Perso, je préfère toujours écrire mes propres délégués avec les arguments dont j'ai besoin.
Bonjour Whismeril et encore merci pour ta disponibilité.
Je vais faire un effort :utiliser votre outil "Extrait de code" :
j'ai déclaré un "delegate" perso ... je déclare un évènement rattaché à ce "delegate" .... etc
Voici le code ci dessous. j'espère avoir réussi
Molo A plus
public delegate void Th_AddEventHandler(object sender, EventArgs e); // type delegate public partial class Form2 : Form { public event Th_AddEventHandler event_momo; // evènement // ....... // pour activer l'évènement Th_AddEventHandler eh = event_momo; // oui facultatif comme tu dis eh?.Invoke(this, EventArgs.Empty); // .... } // fin de la première classe // Dans seconde classe: public partial class Thunder_Add : Form { // ... Form2 Form_nv_adh = new Form2(); Form_nv_adh.event_momo += this.Evenement_Maj_fich; // ... } // fin de la seconde classe
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionA première vue, ça me parait correct.
Par contre, comme tu n'as pas besoin de passer d'arguments, tu peux écrire le délégué sans.
A toi de voir.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Merci Whismeril ... mais hélas le code est correct mais ca ne marche pas !!!!!
Ma préoccupation: pourquoi en debogage, je trouve toujours "event_momo = null" ????
Je devrais voir une valeur puisque le code est correct ... laquelle ? je ne sais pas .... par contre le type de "event_momo" est bien celui déclaré.
A partir de là, je ne sais dans quelle direction chercher ???? je ne trouve pas de faille
Quels sont les outils de VS qui pourrait m'éclairer ??? m'orienter vers une recherche précise ????
Molo merci
Tu codes avec quelle framework?
Je vais tester de mon côté avec la même configuration.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Je viens de tester en 6.0, voici les codes complets de mes 2 formulaires
namespace Test_Winform_Dot_Net_6 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Form2 monForm2 = new Form2(); monForm2.MonEvenement += MonForm2_MonEvenement; monForm2.MonEventHandler += MonForm2_MonEventHandler; monForm2.Show(); } private void MonForm2_MonEventHandler(object? sender, EventArgs e) { MessageBox.Show($"{sender?.ToString()} a généré l'évènement MonEventHandle"); } private void MonForm2_MonEvenement(Form2 sender) { MessageBox.Show($"{sender?.ToString()} a généré l'évènement MonEvenement"); } } }
et
namespace Test_Winform_Dot_Net_6 { public partial class Form2 : Form { public delegate void MonDelegueEvenement(Form2 sender); public event MonDelegueEvenement MonEvenement; public event EventHandler MonEventHandler; public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { MonEvenement?.Invoke(this); } private void button2_Click(object sender, EventArgs e) { MonEventHandler?.Invoke(this, EventArgs.Empty); } } }
J'ai donc 2 boutons, 1 évènement avec délégué perso (sans argument complémentaire, c'est un peu l'intérêt) et 1 évènement par défaut.
Et ça donne
Donc en première intention, je te propose de nettoyer ton projet, puis de le régénérer (dans le menu Générer).
Si ça ne marche pas non plus, alors cela doit venir d'une partie du code que tu ne montres pas. Un truc à la con, comme un problème de portée par exemple.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
PS vu la signature de ton EventHandler, je suppose maintenant que tu es en 4.8.
bonsoir,
je suis en NET framework 4.7.2 et avec VS 2022 Enterprise (64 bits) ... depuis 3 mois seulement, avant c'était avec Community (pas grand changement)
j'essaie de faire un applicatif pour enregistrer nos nouveaux adhérents de notre petite asso (300 max) donc mon développement ne demande pas une expertise en VS.
Oui je regènère souvent la solution .... peu souvent je la nettoie. Le menu "Exécuter l'analyse du code sur la solution " ca fait quoi ??? je pourrais voir ...
Mais c'est la première fois que je n'arrive pas au resultat. Le fait que "Event_momo" soir null au départ ??? je vois cela au débogage ... donc normal que l'évènement échoue. Tu as quelle valeur quand ca marche ???
Je vais voir ce que je peux faire de ton code ... le monter sur un projet à part
Bonne soirée merci
Le fait que "Event_momo" soir null au départ ???
Ça dépend de ce que tu appelles "au départ", dans le constructeur, c'est normal, cette méthode est exécutée au moment d'un new Form2(); et donc à cet instant, y'a encore rien d'abonné.
Plus tard (genre au moment de généré l'évènement), c'est la ou les méthode(s) abonnée(s).
L'analyse, c'est pour faire de l'optimisation.
Pour une asso, il n'y avait pas de besoin légal d'acheter la version Entreprise, Community est utilisable dans ce cas.
Les différences sont surtout dans les outils d'intégration en équipe pour les gros projets, et certains outils de debug un peu plus efficaces.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Whismeril j'ai trouvé mon erreur grâce à toi donc grand MERCI;
Je te donne ma démarche:
A partir du code que tu m'as donné, je l'ai copié dans un nouveau projet ... et j'ai constaté que ca marchait "au poil". ... j'ai observé ton code et je me suis aperçu que tu utilisais "Show()" pour afficher le second formulaire alors que moi j'utilise "ShowDialog()" pour un affichage modal.
Dans mon code, je change en "Show()" et je m'aperçois que ça marche ... je suis sur la bonne route.
Dans ton code, je change en "ShowDialog()" et ça marche encore ... donc je regarde à la loupe cet endroit de mon code ....
et Eureka .... ma ligne d'abonnement à l'évènement était écrite APRES le "ShowDialog()" , donc non prise en compte (emmêlée dans des lignes de commentaires).
J'ai re écrit cette partie du code et tout marche comme je le souhaite.
Grace à toi ... GRAND MERCI pour ta disponibilité
J'aurai certainement encore besoin de vos compétences .... mais comme "chez le docteur" le plus tard possible (rires).
Grossière erreur stupide de ma part voila la conclusion.
Molo2003
Tant mieux et de rien.
Pense à marquer le sujet résolu.
Je te conseille de passer ton source en 4.8 car c'est la seule avant 6.0 qui sera encore soutenue par windows 11 quelques temps et ça ne devrait pas changer grand chose dans ton code (contrairement à passer en 6 ou 7).
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Hello Whismeril;
La procédure pour mettre en "résolu" ? je cherche et ne trouve pas
Merci de m'indiquer.
Molo