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 :

comment vider le contenu d'un textbox apres plusieurs secondes


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut comment vider le contenu d'un textbox apres plusieurs secondes
    bonjour,
    j'aimerais réaliser une petite tâche en c#.
    on va faire simple pour décrire ce que je veux faire.
    disons qu'avec un bouton, je valorise un label, et j'aimerais que celui-ci se vide tout seul après 3 secondes environ.

    sauriez-vous comment je pourrais procéder ? j'ai chercher sur google bien sûr, mais je reviens bredouille u_u, lol

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Lu, tres simple tu crees un timer avec un interval de 3 secondes, tu implementes l'evenement "tic" dans lequel tu reinitialises ton label.

  3. #3
    Membre actif

    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 65
    Points : 283
    Points
    283
    Par défaut
    Bonjour,

    Alors en fait c'est pas bien compliqué.

    Déjà il faut savoir si pendant ces 3 secondes tu veux pauser ton programme, dans ce cas là tu peux faire une boucle comme cela à l'appuie du bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DateTime debut = DateTime.Now;
     
    while(DateTime.Now - debut < 3000)
    {}
     
    //Ensuite faire ce que tu veux ;)

    Sinon si tu veux que ca le fasse au bout de 3 secondes sans intérompre ton programme il faut que tu execute cela dans un thread. Tu as de très bons tutos sur le threading sur le site.

    En fait l'appuie sur ton bouton provoquerai le début du thread, qui contiendrait la même chose que ce que j'ai mis plus haut .


    EDIT : Oui la solution plus haut est aussi simple c'est sur

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour ces réponses, je vais essayer les deux
    lol

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai écris ça, mais ça ne marche pas u_u
    le label n'est jamais valorisé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LblTaux.Text = (z * 100) + " %";
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Interval = 3000;
    LblTaux.Text = "";

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Ce code est a quel niveau??Au debut, lors du clic?

    Le mieux c'est de faire ca au debut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LblTaux.Text = (z * 100) + " %";
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Interval = 3000;
    Ta fonction de clic sur le bouton doit ressembler a quelquechose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void button1_Click(object sender, System.EventArgs e)
    {
        aTimer.Start();
    }
    Et enfin tu ecris ta fonction de tic du timer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        LblTaux.Text = "";

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    le code que j'ai donné se passe à la fin du clique :

    grosso modo, voila ce qui se passe dans la fonction :

    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
    public void Zoom(Bitmap myImage, double zoom)
            {
                int Hauteur = uneImage.GetHauteurImg();
                int Largeur = uneImage.GetLargeurImg();
     
                // zoom de 20% >> 1 + (2/10) >> 1 + 0.20 >> 1.20
                double z = ((zoom / 10) + 1);
     
                if ((z >= 1) && (z <= 3))
                {
                    int NouvelleHauteur = Convert.ToInt32(Math.Ceiling(Hauteur * z));
                    int NouvelleLargeur = Convert.ToInt32(Math.Ceiling(Largeur * z));
     
                    Bitmap myImage2 = new Bitmap(myImage, new Size(NouvelleLargeur, NouvelleHauteur));
                    PBImage.Image = myImage2;
     
                    ReglageTaillePBimage(NouvelleLargeur, NouvelleHauteur);
                    PositionInitialePBImage();
     
                    LblTaux.Text = (z * 100) + " %";
     
                    // on attend 3 secondes
     
                    // on vide le label
     
                    LblTaux.Text = "";
                }
            }
    le début du code permet de calculer le taux en % à afficher dans le label, puis on le vide après.

    j'ai recopié ton code, voilà ce que ca donne :

    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
    33
    34
    public void Zoom(Bitmap myImage, double zoom)
            {
                int Hauteur = uneImage.GetHauteurImg();
                int Largeur = uneImage.GetLargeurImg();
     
                // zoom de 20% >> 1 + (2/10) >> 1 + 0.20 >> 1.20
                double z = ((zoom / 10) + 1);
     
                if ((z >= 1) && (z <= 3))
                {
                    int NouvelleHauteur = Convert.ToInt32(Math.Ceiling(Hauteur * z));
                    int NouvelleLargeur = Convert.ToInt32(Math.Ceiling(Largeur * z));
     
                    Bitmap myImage2 = new Bitmap(myImage, new Size(NouvelleLargeur, NouvelleHauteur));
                    PBImage.Image = myImage2;
     
                    ReglageTaillePBimage(NouvelleLargeur, NouvelleHauteur);
                    PositionInitialePBImage();
     
                    LblTaux.Text = (z * 100) + " %";
                    System.Timers.Timer aTimer = new System.Timers.Timer();
     
                    aTimer.Start();
                    if (tics >= 3)
                    {
                        LblTaux.Text = "";
                        aTimer.Stop();
                    }
                    else
                    {
                        tics++;
                    }
                }
            }
    mais "tics" n'est pas reconnu.

  8. #8
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Points : 145
    Points
    145
    Par défaut
    Je pense que dans ton compte tu as oublié de:
    1. Associer une action à déclencher à la fin du timer.
    2. Lancer le timer (start()).

    Sinon petite remarque, tu n'es pas obligé de faire référence à System.Timers. Dans l'espace de nom System.Windows.Forms tu as aussi une classe Timer (System.Windows.Forms.Timer)

    A titre d'exemple, voici un morceau de code basique avec un label et un bouton sur un Form

    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
    namespace TestTimer
    {
    public partial classForm1 : Form
    {
     public Form1()
     {
       InitializeComponent(); 
     }
     
     privatevoid button1_Click(object sender, EventArgs e)
     {
       Timer myTimer = new System.Windows.Forms.Timer();
       myTimer.Interval = 3000;
       myTimer.Tick += delegate(object evtSender, EventArgs evtArg)
       {
         this.myLabel.Text = "Cancelled";
       };
     
       myTimer.Start();
     }
    }
    }
    Pour du code plus compliqué, tu peux remplacer le délégué anonyme (delegate(....){} ) par une référence à une methode de ton code.

    J'espère que celà va t'aider.

    A+

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour ton code phertzog, ça marche.
    lorsque je clique la première fois sur le bouton, le label se vide après 3 secondes, comme souhaité.
    mais pour les cliques d'après, le délai est raccourcit :s

    je reposte le code :

    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
    public void Zoom(Bitmap myImage, double zoom)
            {
                int Hauteur = uneImage.GetHauteurImg();
                int Largeur = uneImage.GetLargeurImg();
     
                // zoom de 20% >> 1 + (2/10) >> 1 + 0.20 >> 1.20
                double z = ((zoom / 10) + 1);
     
                if ((z >= 1) && (z <= 3))
                {
                    int NouvelleHauteur = Convert.ToInt32(Math.Ceiling(Hauteur * z));
                    int NouvelleLargeur = Convert.ToInt32(Math.Ceiling(Largeur * z));
     
                    Bitmap myImage2 = new Bitmap(myImage, new Size(NouvelleLargeur, NouvelleHauteur));
                    PBImage.Image = myImage2;
     
                    ReglageTaillePBimage(NouvelleLargeur, NouvelleHauteur);
                    PositionInitialePBImage();
     
                    LblTaux.Text = (z * 100) + " %";
     
                    Timer myTimer = new System.Windows.Forms.Timer();
                    myTimer.Interval = 3000;
                    myTimer.Tick += delegate(object evtSender, EventArgs evtArg)
                    {
                        LblTaux.Text = "";
                    };
                    myTimer.Start();
                }
            }

  10. #10
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Points : 145
    Points
    145
    Par défaut
    Je pense que c'est du au fait que dans le code que je t'ai donné, je n'ai pas inclus d'instruction pour arrêter le Timer une fois le tick déclenché. Du coup le premier Timer efface toutes les 3 secondes. Si tu appuie sur le bouton une seconde fois, tu créé un nouveau timer qui aura son propre interval.


    Je pense que le code serait plus propre en:
    1. Déclarant le timer dans une propriété globale (comme ça on ne recréé pas un timer à chaque click.
    2. Dans l'evenement, on arrête le timer une fois qu'il est arrivé au bout du temps imparti.
    3. Sur le click du bouton, on teste si le timer tourne deja (je ne sais pas trop ce qui se passe si on fait 2 start successifs).
    Voici un exemple remanié :
    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
    33
    namespace TestTimer
    {
     publicpartialclassForm1 : Form
     {
       privateint count = 0;
       privateTimer myTimer = newTimer();
     
       public Form1()
       {
         InitializeComponent();
         myTimer.Interval = 3000;
         myTimer.Tick += delegate(object evtSender, EventArgs evtArg)
         {
           this.count += 1;
           this.myLabel.Text = "Cancelled " + this.count.ToString();
    (evtSender asTimer).Stop();
         };
       }
     
       privatevoid button1_Click(object sender, EventArgs e)
       {
         if (myTimer.Enabled)
         {
           MessageBox.Show("Already running");
         }
         else
         {
           myTimer.Start();
         }
       }
     }
    }
    PS : après test, il semble que plusieurs Start() ne pose pas de problème. Le timer néglige les appel Start() s'il n'a pas fini. Tu peux donc enlever le test sur click bu bouton.

  11. #11
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    et Thread.Sleep(3000) vous connaissez?

  12. #12
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    et Thread.Sleep(3000) vous connaissez?
    Je crois pas que le but soit de bloquer tout le Thread pendant 3 secondes. J'ai peut être mal compris le besoin.

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci phertzog, maintenant ça fonctionne très bien !

  14. #14
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'aimerais utiliser cette fonction dans un autre cas, mais je n'arrive pas à l'adapter.
    bon voila, pour ce meme projet, j'aimerais créer un diaporama.

    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
    33
    34
    35
    36
    37
    38
    public Main()
            {
                InitializeComponent();
     
                Timer MinuterieDiapo = new System.Windows.Forms.Timer();
                MinuterieDiapo.Interval = 1000;
                MinuterieDiapo.Tick += delegate(object evtSender, EventArgs evtArg)
                {
                    // on commence par repositionner la picturesBox
                    PositionInitialePBImage();
     
                    string leChemin = unChemin.GetChemin();
                    string leFichier = uneImage.GetNomImg();
     
                    leFichier = unChemin.ImageSuivante(leFichier);
                    AttribuerImage(leChemin, leFichier);
     
                    (evtSender as Timer).Stop();
                };
            }
     
     
     
     
     
    private void lireLeDiaporamaToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (unChemin != null)
                {
                    if (unChemin.GetNbImages() >= 1)
                    {
                        while (!MinuterieDiapo.Enabled)
                        {
                            MinuterieDiapo.Start();
                        }
                    }
                }
            }
    ce code devrait permettre d'afficher l'image suivante, mais je n'arrive pas à utiliser le timer comme il faudrait -_-

  15. #15
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    c'est bon j'ai réussi, avec une solution bricolo, mais ca marche ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2009, 16h24
  2. Comment controler le contenu d'une textBox?
    Par shyx21 dans le forum C#
    Réponses: 13
    Dernier message: 15/01/2008, 20h21
  3. Réponses: 2
    Dernier message: 02/11/2007, 18h12
  4. Comment supprimer le contenu d un textbox lorsqu'on clik dessus
    Par orj30754 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/02/2007, 16h28
  5. [C#] Comment vider le contenu d'un Repeater ?
    Par luimême dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/01/2006, 10h29

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