IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Gestion d'evenements


Sujet :

Windows Forms

  1. #1
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut [C#] Gestion d'evenements
    Bonjour, j'ai créé une classe composant, qui hérite de TextBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class clsTextBox : TextBox
    dans laquelle j'ai créé un evenement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event EventHandler TextChecked;
    EventHandler étant un délégué fournit par le FrameWork .NET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate void EventHandler(Object sender, EventArgs e);
    Ensuite je déclenche cet evenement à partir de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void clsTextBox_TextChanged(object sender, System.EventArgs e)
    		{
    			try
    			{	
    				// déclencher  l'event
    				this.TextChecked(sender,e);
    			}
    			catch (Exception ex)
    			{
    				MessageBox.Show(ex.ToString());
    			}
    Jusque là tout vas bien.

    Cependant lors de l'utilisation de ce composant, via code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Form01.myclsTextBox1.text="TOTO"
    l'erreur System.NullReferenceException: Object reference not set to an instance of an object se produit lorsque je déclenche l'evenement.

    MAIS quand je saisi une valeur directement dans le controle, tout ce passe bien.

    J'ai remarqué que si j'ajoute une gestion de l'evenement dans la form01 même vide, l'erreur ne se produit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		private void myclsTextBox1_TextChecked(object sender, System.EventArgs e)
    		{
     
    		}
    Ce qui voudrait dire qu'il m'est impossible de déclencher un evenement si aucune gestion ou liaison de cet evenement existe sur form01 ???? Là je comprends plus rien moa !!

    Question : Doit-on OBLIGATOIREMENT avoir une gestion d'évenement ou un evenement peut il être déclenché dans le "vide" ?

    Merci d'avance !

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    il me semble pas qu'il soit nécessaire de déclarer pour chaque contrôle une gestion d'évennement. faudrais voir le code de ton event pour localiser l'erreur.

    En fait, ce qui est possible, c'est que le fait de déclarer un myclsTextBox1_TextChecked permet de surcharger l'évennement et donc de rentrer dans cette event à la place de clsTextBox_TextChanged et donc d'éviter une erreur possible.

    Enfin jdit ptet des conneries.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut Re: [C#] Gestion d'evenements
    Citation Envoyé par sygale
    Question : Doit-on OBLIGATOIREMENT avoir une gestion d'évenement
    Non.
    Citation Envoyé par sygale
    ou un evenement peut il être déclenché dans le "vide" ?
    Non plus. Mais tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( this.TextChecked != null )
    avant de lancer :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut Re: [C#] Gestion d'evenements
    Citation Envoyé par Maniak
    Non plus. Mais tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( this.TextChecked != null )
    avant de lancer
    Si je ne m'abuse, c'est même ce qu'il est conseillé de faire (cf. exemples MSDN, Piotrek va surement passer pour fournir le lien exact...)
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut Re: [C#] Gestion d'evenements
    Citation Envoyé par Keihilin
    Si je ne m'abuse, c'est même ce qu'il est conseillé de faire
    Bah disons qu'il n'y a pas trop le choix. Soit on teste avant de lancer, soit on met systématiquement un gestionnaire. C'est a priori ce qui est fait pour les contrôles web, sauf erreur, ils ont tous une méthode correspondant à chaque événement. Ça simplifie aussi la gestion des événements dans les classes dérivées, il suffit de faire un override, pas besoin de rattacher un gestionnaire d'événement à chaque fois :)

    Ça si je ne m'abuse (chacun son tour :) c'est ce qu'il est conseillé pour les classes dérivées, justement.
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  6. #6
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut Re: [C#] Gestion d'evenements
    Citation Envoyé par Maniak
    Mais tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( this.TextChecked != null )
    avant de lancer
    Excellent, cela fonctionne d'enfer.

    QUESTION
    Si je comprend bien le truc en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( this.TextChecked != null )
    sert de test pour savoir si un gestionnaire d'evenement est présent ou absent ?.

    Merci pour tout !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut Re: [C#] Gestion d'evenements
    Citation Envoyé par sygale
    Si je comprend bien le truc en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( this.TextChecked != null )
    sert de test pour savoir si un gestionnaire d'evenement est présent ou absent ?.
    Yup, c'est pile poil tout à fait exactement totalement complètement parfaitement ça :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des evenements avec la SDL
    Par gusgus dans le forum Ogre
    Réponses: 5
    Dernier message: 01/11/2006, 10h47
  2. Réponses: 3
    Dernier message: 25/08/2006, 23h11
  3. gestion d'evenement access2000
    Par mike600river dans le forum Access
    Réponses: 4
    Dernier message: 16/05/2006, 17h37
  4. Réponses: 11
    Dernier message: 15/02/2006, 14h45
  5. [C#] Gestion des evenements
    Par zebulix13 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2004, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo