2 votes

C# Windows Form Compte à rebours

J'ai trois zones de texte (heures, minutes, secondes), un bouton de démarrage, de pause et d'arrêt et j'utilise des étiquettes pour afficher le minuteur actuel. J'ai également une minuterie avec un intervalle de 1000 . Ma question est la suivante : pourquoi l'heure ne s'affiche-t-elle pas à l'aide des étiquettes ? Tout le reste fonctionne, mais il n'enregistre pas le fait que j'ai mis des valeurs dans les zones de texte.

Code

Minuterie de démarrage :

    private void startbutton_Click(object sender, EventArgs e)
    {
        if (paused != true) //Timer is not paused (active)
        {

            int.TryParse(textBoxhrs.Text, out hours);
            int.TryParse(textBoxmin.Text, out minutes);
            int.TryParse(textBoxsec.Text, out seconds);

            if (hours >= 1 || (minutes >= 1) || (seconds >= 1))

            //If there is at least one integer entered in any of the 3 boxes, executes; else - //throws an exception
            {
                startbutton.Enabled = true;
                pausebutton.Enabled = true; //changed the value to 'true'  
                stopbutton.Enabled = true; //changed the value to 'true'
                textBoxhrs.Enabled = false;
                textBoxmin.Enabled = false;
                textBoxsec.Enabled = false;
            }
            else
            {
                MessageBox.Show("Enter at least one integer!");
            }
        }
    }

    private void stopbutton_Click(object sender, EventArgs e)
    {
        // Stop the timer. 
        paused = false;
        timer1.Enabled = false;
        startbutton.Enabled = true; //changed to true
        stopbutton.Enabled = false; //changed to false
        pausebutton.Enabled = false; //changed to false
        textBoxsec.Clear();
        textBoxmin.Clear();
        textBoxhrs.Clear();
        textBoxhrs.Enabled = true;
        textBoxsec.Enabled = true;
        textBoxmin.Enabled = true;
        textBoxhrs.Enabled = true;
        lblHr1.Text = "00";
        lblMin1.Text = "00";
        lblSec1.Text = "00";
        MessageBox.Show("Timer is Stopped, to re-start press <Start>"); //updated to give user a chance to run the timer again after stoppage.

    }

Bouton Pause :

    private void pausebutton_Click(object sender, EventArgs e)
    {
        // Pause the timer. 
        timer1.Enabled = false;
        paused = true; //
        startbutton.Enabled = true; // changed to true
        pausebutton.Enabled = false; //changed to false
    }

Minuterie :

    private void timer1_Tick(object sender, EventArgs e)
    {
        // Verify if the time didn't pass.
        if ((minutes == 0) && (hours == 0) && (seconds == 0))
        {
            // If the time is over, clear all settings and fields.
            // Also, show the message, notifying that the time is over.
            timer1.Enabled = false;
            MessageBox.Show(textBoxMsg.Text);
            pausebutton.Enabled = false;
            stopbutton.Enabled = false;
            startbutton.Enabled = true;
            textBoxMsg.Clear();
            textBoxsec.Clear();
            textBoxmin.Clear();
            textBoxhrs.Enabled = true;
            textBoxMsg.Enabled = true;
            textBoxsec.Enabled = true;
            textBoxmin.Enabled = true;
            textBoxhrs.Enabled = true;
            lblHr1.Text = "00";
            lblMin1.Text = "00";
            lblSec1.Text = "00";
        }
        else
        {
            // Else continue counting.
            if (seconds < 1)
            {
                seconds = 59;
                if (minutes == 0)
                {
                    minutes = 59;
                    if (hours != 0)
                        hours -= 1;

                }
                else
                {
                    minutes -= 1;
                }
            }
            else
                seconds -= 1;
            // Display the current values of hours, minutes and seconds in
            // the corresponding fields.
            lblHr1.Text = hours.ToString();
            lblMin1.Text = minutes.ToString();
            lblSec1.Text = seconds.ToString();
        }
    }

2voto

ltiong_sh Points 3058

Il y a d'autres problèmes avec le code, mais la raison pour laquelle vous ne voyez pas les étiquettes se mettre à jour est que vous ne démarrez jamais le minuteur.

Dans le clic de démarrage, vous devez ajouter :

...
stopbutton.Enabled = true; //changed the value to 'true'
textBoxhrs.Enabled = false;
textBoxmin.Enabled = false;
textBoxsec.Enabled = false;

timer1.Start();  //<-- start the timer object

2voto

TheEvilPenguin Points 3904

Vous devez faire deux choses pour que cela fonctionne :

Vous devez lancer la minuterie dans startbutton_Click :

if (hours >= 1 || (minutes >= 1) || (seconds >= 1))

//If there is at least one integer entered in any of the 3 boxes, executes; else - //throws an exception
{
    startbutton.Enabled = true;
    ...
    timer1.Enabled = true;
}

Vous devez relier l'événement Tick du timer à timer1_Tick. Pour ce faire, sélectionnez la minuterie et cliquez sur l'icône de la barre d'outils en forme d'éclair dans le cadre Propriétés, puis sélectionnez timer1_Tick pour Tick.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X