Entwickler-Ecke
C# - Die Sprache - Timerprob
sepp_a_u - Mo 10.12.07 20:40
Titel: Timerprob
servus,
will mir gerade nen kl. Wecker machen. Man gibt die Zeit ein, an welcher er losringen soll. auch kien problem ;) aber ich weiß nicht, wie ich es mache, dass die eingegebene zeit mit der akutellen uhrzeit verglichen wird. das muss man ja machen oder, denn sonst kann ja kein ereignis ausgelöst werden.
jetzt weiß ich nicht, wie das geht. mit nem timer denk ich mal oder?
vll kann mir wer sagen bzw stichwörter sagen, wie ich es machen muss. und vll hat auch noch wer ein schönes tut zu TIMERN in C#, denn das im openbook ist recht sperrlich.
der quelltext:
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: 45: 46:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace alarm_clock { public partial class Form1 : Form { public Form1() { InitializeComponent();
timActlTime.Enabled = true; btnStop.Enabled = false; Invalidate(); }
private void timActlTime_Tick(object sender, EventArgs e) { lblActlTime.Text = DateTime.Now.ToString(); }
private void lblActlTime_Click(object sender, EventArgs e) {
}
private void btnStart_Click(object sender, EventArgs e) { dtpInput.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = true; }
private void btnStop_Click(object sender, EventArgs e) { dtpInput.Enabled = true; btnStart.Enabled = true; btnStop.Enabled = false; } } } |
mfg
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Christian S. - Mo 10.12.07 21:03
Hallo!
Zuerst einmal solltest Du den Timer aktivieren, wenn auf Start geklickt wird und deaktiviere, wenn auf Stop geklickt wird. Ihn mein Programmstart zu starten, macht IMHO keinen Sinn.
Im Tick-Ereignis prüfst Du dann, ob die eingegebene Zeit mit der Systemzeit übereinstimmt. Also so:
C#-Quelltext
1: 2:
| if (eingegebeneZeit == DateTime.Now) klingeln(); |
Du musst dann noch das, was in die TextBox eingegeben wurde in einen DateTime-Wert umwandeln, da sollte es eine entsprechende Parse-Methode geben.
Damit solltest Du erstmal weiter kommen :-)
Grüße
Christian
sepp_a_u - Mo 10.12.07 21:05
der timer ist beim start des programms enabled, weil ja damit die akutelle zeit immer angezeigt wird. sonst kann ich das nicht machen...muss ich dann noch nen zweiten timer machen für die weckzeit? oder wie?
mfg
Christian S. - Mo 10.12.07 21:08
Ach so, nee, dann mach das und den Vergleich in einem Timer.
Mir fällt gerade ein, dass es sogar ein Komponente gibt, wo man eine Uhrzeit eingeben kann, dann brauchst Du keine TextBox nehmen. Musst mal die Komponentenpalette durchgehen, was das war :gruebel:
sepp_a_u - Mo 10.12.07 21:14
jo ich weiß, die komponente benutze ich auch. sie heißt: DateTimePicker. :) die meinst du doch sicher oder?
da gibt der user jetzt das datum ein. und jetzt? jetzt also nochmal nen neuen timer machen oder wie?
aber wie vergleiche ich dann? ich muss dann auch noch das datetimepicker element umwandeln, da man es nicht einfach so mit dem normalen datetime objekt vergleichen kann ...hab ich schon verbraucht
mfg
Christian S. - Mo 10.12.07 21:22
Ja, genau der war es :-)
Der DateTimePicker sollte eine Value-Eigenschaft vom Typ DateTime haben. Die vergleichst Du im Timer mit DateTime.Now. Wenn's gleich ist, muss's bimmeln ;-)
Du kannst die Anzeige der aktuellen Uhrzeit und die ... äh ... Bimmel-Überprüfung in einem Timer machen.
sepp_a_u - Mo 10.12.07 21:30
also muss ich quasi nur folgendes im ticker einfügen:
C#-Quelltext
1: 2: 3: 4:
| if (dtpInput.Value == DateTime.Now) { MessageBox.Show("Test"); } |
oder nicht? oder muss ich noch woanders was rein machen? eigentlich nicht oder? denn der timer läuft ja schon von anfang an. aber wenn ich das obengeschriebene mache, dann passiert leider nichts
mfg
JüTho - Mo 10.12.07 21:43
... deshalb hat Christian ja auch gesagt, dass der Timer nicht von Anfang an laufen sollte, sondern erst durch "Start" ausgelöst werden soll. Also musst Du dort noch hinzufügen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void btnStart_Click(object sender, EventArgs e) { dtpInput.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = true; timActlTime.Enabled = true; } |
Außerdem solltest Du die gewünschte Zeit
nicht auf Gleichheit prüfen, sondern auf größer/gleich: Es ist sehr unwahrscheinlich, dass die gewünschte Zeit im TimerTick genau getroffen wird.
Gruß Jürgen
sepp_a_u - Mo 10.12.07 22:09
so habs jetzt gelöst. allerdings mit 2 timern. mit einem hab ich es nicht hinbekommen. wie mache ich es denn in einem timer, damit die AKTUELLE uhrzeit auch immer läuft, auch wenn man noch nicht aufn button START geklickt hat?
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: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace alarm_clock { public partial class Form1 : Form { public Form1() { InitializeComponent();
timAlarm.Enabled = false; timActlTime.Enabled = true; btnStop.Enabled = false; }
private void timActlTime_Tick(object sender, EventArgs e) { lblActlTime.Text = DateTime.Now.ToString(); }
private void lblActlTime_Click(object sender, EventArgs e) { Invalidate(); }
private void btnStart_Click(object sender, EventArgs e) { dtpInput.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = true; timAlarm.Enabled = true; }
private void btnStop_Click(object sender, EventArgs e) { dtpInput.Enabled = true; btnStart.Enabled = true; btnStop.Enabled = false; timAlarm.Stop(); }
private void timAlarm_Tick(object sender, EventArgs e) { if (dtpInput.Value <= DateTime.Now) { btnStart.Enabled = true; btnStop.Enabled = false; dtpInput.Enabled = true; timAlarm.Stop(); MessageBox.Show("Test"); } } } } |
mfg
JüTho - Di 11.12.07 11:05
Hallo,
in diesem Fall muss der (gemeinsame) Timer tatsächlich von Anfang an laufen. Außerdem brauchst Du eine zusätzliche Variable, mit der geprüft wird, ob der "Alarm" bereits aktiviert wurde. Zum Beispiel so mit btnStop:
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:
| public partial class Form1 : Form { public Form1() { InitializeComponent();
timAlarm.Enabled = true; btnStop.Enabled = false; }
private void btnStart_Click(object sender, EventArgs e) { dtpInput.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = true; }
private void btnStop_Click(object sender, EventArgs e) { dtpInput.Enabled = true; btnStart.Enabled = true; btnStop.Enabled = false; }
private void timAlarm_Tick(object sender, EventArgs e) { lblActlTime.Text = DateTime.Now.ToString(); if (btnStop.Enabled && dtpInput.Value <= DateTime.Now) { btnStart.Enabled = true; btnStop.Enabled = false; dtpInput.Enabled = true; MessageBox.Show("Test"); } } } |
Gruß Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!