Autor |
Beitrag |
sepp_a_u
      
Beiträge: 51
Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
|
Verfasst: Mo 10.12.07 20:40
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:
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
sepp_a_u 
      
Beiträge: 51
Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
sepp_a_u 
      
Beiträge: 51
Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
sepp_a_u 
      
Beiträge: 51
Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
|
Verfasst: 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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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 
      
Beiträge: 51
Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
|
Verfasst: 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?
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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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:
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
|
|