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 :

des evenements qui se suppriment tous seul


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de LaDeveloppeuse
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 73
    Points
    73
    Par défaut des evenements qui se suppriment tous seul
    Bonjour,
    Voilà j'ai un petit souchi et je ne comprend pas du tout le pourquoi du comment et à cause de quoi ça se produit...

    Je réalise une application avec une interface graphique qui comporte plusieurs éléments. A un des ces éléments (prenons pour exemple un textbox) je lui attribut un événement du type "MouseClick" dans le fichier Form.Designer.cs. Ce qui me donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                this.myTextBox.MouseClick += new System.Windows.Forms.MouseEventHandler(myTextBox_MouseClick);
    Puis je lui écrit dans le fichier Form.cs ce que doit faire l'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            private void myTextBox_MouseClick(object sender, EventArgs e)
            {
                ...
            }

    Pour l'instant aucun problème. Mais lorsque je démarre le débogage de mon application (F5 sur visual C#), rien de se passe lorsque je clique sur mon textbox. L'événement ne s'exécute pas. Alors j'arrête le débogage, et je m'aperçois que dans le fichier Form.Designer.cs la ligne que j'ai rajouté a été supprimer du code... Voilà le souchi lol.

    Quelqu'un aurait une suggestion a propos de ce phénomène étrange ?

    Je vous remercie par avance.

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par LaDeveloppeuse Voir le message
    Alors j'arrête le débogage, et je m'aperçois que dans le fichier Form.Designer.cs la ligne que j'ai rajouté a été supprimer du code... Voilà le souchi lol.

    Quelqu'un aurait une suggestion a propos de ce phénomène étrange ?
    Oui, suggestion j'ai : ne pas toucher au designer.cs. Soit tu ajoutes le lien entre l'événement du contrôle et ta fonction en passant par le designer, soit dans le code de ta form (taForm.cs).

    Le fichier designer.cs est essentiellement constitué d'une fonction nommée InitializeComponents(), qui rassemble tout un tas de tuyauterie qu'il veut mieux éviter de tripoter, parce qu'elle est générée par le designer.

  3. #3
    Membre régulier Avatar de LaDeveloppeuse
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 73
    Points
    73
    Par défaut
    D'accord je vois... Il serait donc peut être judicieux de le mettre dans le Form_Load() tu pense ... ?

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par LaDeveloppeuse Voir le message
    D'accord je vois... Il serait donc peut être judicieux de le mettre dans le Form_Load() tu pense ... ?
    Le mieux, c'est qu'au final ça soit dans le designer.cs, mais je te conseille fortement d'utiliser le designer de forms pour ça. Tu cliques sur ton bouton, tu regardes ses propriétés, tu cliques sur le bouton "événements", tu double-clique sur l'event auquel tu veux t'abonner, et visual té génère tout seul une méthode vide qui a la bonne tête dans taForm.cs et rajoute le event += bidule dans le taForm.designer.cs.

    Vive les designers

  5. #5
    Membre régulier Avatar de LaDeveloppeuse
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Points : 73
    Points
    73
    Par défaut
    D'accooooooooooooooooooord!!
    Je te remerci beaucoup pour ton aide précieuse. Tu a finis par lever le mystère de l'évènement volatile

    Je te souhaite une bonne continuation !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    apparement le probleme est resolu, mais pour precisions, il n'y a pas, AMHA, de plus judicieux, il faut juste une certaine coherence quand tu construit ton UI. Que les controls soient placés par le designer dans le InitializeComponents ou par toi dans le code de la form (à l'exception du fichier designer.cs), ca n'a pas d'importance, mais c'est soit l'un soit l'autre pas les deux en meme temps. Le designer se sert de le methode InitializeComponents pour representer l'UI, si tu commences à mixer les appels entre le code de la form et le designer, ca peut créer des problemes, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       public partial class Form1 : Form
        {
            TextBox tBox;
            public Form1()
            {
                tBox = new TextBox();
                InitializeComponent(); //ajoute une methode qui manipule la textBox dans la methode du designer
            }
        }
    Ce code est correct, compile et fonctionne, par contre si tu vas faire un tour du coté du designer, il t'indiquera une erreur de deserialisation.

    Bref, pour reiterer l'avertissement de Ghuul, ne touche pas à l'initialize généré par le designer ! =p

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

Discussions similaires

  1. Des fenêtres qui s'ouvrent toutes seules
    Par larimoise dans le forum Sécurité
    Réponses: 15
    Dernier message: 27/02/2007, 18h31
  2. Réponses: 3
    Dernier message: 06/02/2007, 15h46
  3. Réponses: 15
    Dernier message: 31/01/2007, 23h03
  4. popups de pubs qui se chargent tous seuls..
    Par Swoög dans le forum Autres Logiciels
    Réponses: 21
    Dernier message: 20/07/2006, 15h36
  5. Des requêtes qui s'effacent toutes seules
    Par Celia1303 dans le forum Access
    Réponses: 2
    Dernier message: 16/12/2005, 16h19

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