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

C# Discussion :

Problème Timer et Fermeture de formulaire


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut Problème Timer et Fermeture de formulaire
    Bonjour,

    J'ai une petite appli à faire en C#, ici je voudrais fermer mon formulaire à la fin d'un Timer.

    Mon timer fonctionne, puisque je l'ai testé en remplaçant par et ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Test : Form
        {
            public System.Timers.Timer timer;
     
            public Test()
            {
                InitializeComponent();
     
                timer = new System.Timers.Timer();
                timer.Interval = 10000;
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                timer.Enabled = true;
                timer.Start();
            }
     
            private void timer_Elapsed(object source, EventArgs e)
            {
                Test.Close();
            }
        }
    }
    L'erreur est au niveau de la ligne
    Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'System.Windows.Forms.Form.Close()'.
    Merci d'avance :/

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Citation Envoyé par jeremm Voir le message
    Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'System.ComponentModel.Component.Dispose.
    :/

  4. #4
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Au sein de la classe, pour faire appel à ses méthodes/propriétés on utilise le mot clef this (qui est en fait l'instance de la classe qui passe cet appel) voire si ça ne présente pas d'ambiguïté, on peut l'omettre et appeler directement cette méthode ou propriété (this étant implicitement utilisé par défaut), le code devient donc:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.Close();
    //ou
    Close();

    Cordialement !

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Avec , je peux lancer mon code, et au bout de mon timer j'ai cette erreur :

    Opération inter-threads non valide : le contrôle 'Test' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    Merci tout de même pour ces propositions..!

  6. #6
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Ceci n'a est dû au fait que le Timer s'exécute sur un 2ème thread (comparativement au code principal), or seul ce thread principal n'a le droit de modifier les contrôles (dont fait parti le formulaire) dans ces cas là il faut passer par l'appel d'un délégué (voir la méthode Invoke) par contre je ne sais pas si cela va marcher pour ce qu'il s'agit de la fermeture du formulaire, ne l'ayant pas testé moi-même.

    Cordialement !

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Merci, je vais regarder de ce côté là.

    J'ai aussi vu les délégués, je vais regarder, mais je reste sans conviction...

  8. #8
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Citation Envoyé par Sigiez Voir le message
    Merci, je vais regarder de ce côté là.

    J'ai aussi vu les délégués, je vais regarder, mais je reste sans conviction...
    Ça fait toujours plaisir de sentir que l'aide qu'on apporte est appréciée
    Quoi qu'il en soit voici un exemple fonctionnel de ce dont je parlais:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    using System;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public System.Timers.Timer timer;
            delegate void myClose();
     
            public Form1()
            {
                InitializeComponent();
                timer = new System.Timers.Timer();
                timer.Interval = 10000;
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                timer.Enabled = true;
                timer.Start();
            }
     
            private void timer_Elapsed(object sender, EventArgs e)
            {
                //MessageBox.Show("Fermeture");
                Invoke(new myClose(() => Close()));
            }
     
        }
    }

    Cordialement !

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Je suis désolé, j'ai encore une erreur

    L'élément "obj\x86\Debug\WindowsFormsApplication1.Form1.resources" a été spécifié plus d'une fois dans le paramètre "Resources". Les éléments dupliqués ne sont pas pris en charge par le paramètre "Resources". WindowsFormsApplication1
    J'ai recommencé un nouveau projet dans le doute, mais même erreur...

    Je serais moins nul en .NET, j'aurais surement moins de problème...!

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Bon, finalement, problème résolu !

    J'ai recopié mon code dans un nouveau projet, et l'erreur avait disparu.

    Merci beaucoup Sehnsucht !!

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

Discussions similaires

  1. [AC-2007] Problème requête après fermeture d'un formulaire access 2007
    Par cplx3 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/04/2013, 21h29
  2. Réponses: 4
    Dernier message: 21/05/2007, 13h58
  3. Réponses: 2
    Dernier message: 03/02/2006, 15h12
  4. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21
  5. Réponses: 6
    Dernier message: 19/05/2005, 11h06

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