Entwickler-Ecke

WinForms - Countdown mit Timer


Heddi - Sa 02.03.13 13:12
Titel: Countdown mit Timer
Hallo,

bei meinem Programm möchte ich in eine Textbox einen Wert zb. 10 eintragen und ein Countdown soll dann von 10 bis 0 runterzählen und eine MessageBox erscheinen lassen.
Leider läuft der Timer nicht. Ich habe schon einige Foren und Tutorials durchgesehen aber ich finde nicht den Fehler in meinem Code. Ich hoffe das Ihr mir weiterhelfen könnt. :)


C#-Quelltext
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:
39:
40:
41:
42:
43:
44:
        int timeint;
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (txbTime.Text == "")     // Falls Eingabefeld leer ist
            {
                MessageBox.Show("Keine Zeitangabe vorhanden");
            }
            else
            {
                string time = txbTime.Text;                         // Textboxeingabe string zuweisen
                bool parsed = Int32.TryParse(time, out timeint);    // Eingabe von string zu Int32 umwandeln
                txbTime.Enabled = false;                            // Textboxen und Buttons aktivieren bzw deaktivieren
                txbSoll.Enabled = false;
                btnStart.Enabled = false;
                btnStop.Enabled = true;
                timer1.Enabled = true;
                timer1.Start();                                     // Timer starten
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timeint == 0)                                       // Wenn timeint = 0, Timer stoppen und MsgBox
            {
                timer1.Stop();
                timer1.Enabled = false;
                MessageBox.Show("Messung beendet");
            }
            else
            {
                timeint = timeint - 1;                              // andernfalls 1 abziehen
            }
        }

        private void btnStop_Click(object sender, EventArgs e)      // Stop button: Messung abbrechen
        {
            timer1.Stop();
            timer1.Enabled = false;
            MessageBox.Show("Messung abgebrochen");
            txbTime.Enabled = true;
            txbSoll.Enabled = true;
            btnStart.Enabled = true;
            btnStop.Enabled = false;
        }


Gruß Heddi


papa69 - Sa 02.03.13 14:25

hi,

(ich habe schon lange nichts mehr mit Timer gemacht)

ich gehe davon aus, dass du das timer1.Interval ( = 1000; //für 1 sec) gesetzt hast und den timer_tick-Event angemeldet hast ... ?!

Ansonsten würde ich in Zeile 11 direkt schreiben:


C#-Quelltext
1:
timeint = Int32.Parse(txbTime.Text);  //wobei evtl. noch ein ausdrückliches .ToString() anzuhängen wäre                    

dann würdest du dir Zeile 10 auch noch sparen.

Ansonsten einfach mal mittels Debugger Schritt-für-Schritt (Break-Point setzen und dann F11) das Programm durchlaufen lassen und schauen, ob deine Variablen/Strings richtig gelesen/ausgewertet werden..

Edit 1:

Ich sehe gerade, es gibt noch eine andere Möglichkeit:

C#-Quelltext
1:
timeint = Convert.ToInt(txbTime.Text); //evt. auch mit .ToString()                    


Th69 - Sa 02.03.13 22:18

Hallo papa69,

die von Heddi verwendete TryParse-Methode ist schon die richtige, da diese im Gegensatz zu deinen beiden genannten Methoden keine Exception wirft, die man sonst abfangen müßte.


Heddi - So 03.03.13 15:49

Hi papa69, Th69,

ja den Timer Intervall hab ich im Eigenschaftenfenster von 100 auf 1000 gestellt.
Habe jetzt auch meinen Fehler gefunden. Hatte vergessen unter den Eigenschaften das Tick Verhalten anzumelden.

Danke für die Hilfe! :)