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 éclairé
    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
    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 chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    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 éprouvé

    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
    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 éclairé
    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
    Par défaut
    merci pour ces réponses, je vais essayer les deux
    lol

  5. #5
    Membre éclairé
    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
    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 chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    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 éclairé
    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
    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 éprouvé

    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
    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 éclairé
    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
    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 éprouvé

    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
    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 Expert 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
    Par défaut
    et Thread.Sleep(3000) vous connaissez?

  12. #12
    Membre éprouvé

    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
    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 éclairé
    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
    Par défaut
    merci phertzog, maintenant ça fonctionne très bien !

  14. #14
    Membre éclairé
    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
    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 éclairé
    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
    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