Zunächst zu deinen vorigen Fragen:
conway96 hat folgendes geschrieben : |
1) ist das jetzt das aktuelle datum in einer variable die date heißt?
C#-Quelltext 1:
| DateTime date = DateTime.Parse(tbdatum.Text); | |
Das kann ich nicht beantworten. Der Text, der in tbdatum.Text steht, wird als DateTime-Wert interpretiert. Als ich oben diesen Befehl hingeschrieben hatte, wollte ich das Datum, das für den Alarm gedacht ist, übernehmen. Wenn du als Datum für den Alarm immer das aktuelle Datum benutzen willst, ist das so natürlich eher Quatsch. Dann gehen diese Anweisungen so zusammen:
C#-Quelltext
1: 2: 3:
| DateTime time = DateTime.Parse(tbZeit.Text); alarm = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, time.Hour, time.Minute, 0); |
Die Sekunden auf 0 setzen ist sinnvoll wegen der späteren Prüfung, dass der Alarm beim Wechsel der Minute ausgelöst werden soll.
conway96 hat folgendes geschrieben : |
2) wieso kann ich dann nicht auch den aktuellen termin in variablen schreiben? (das funktioniert nicht, habs versucht)
C#-Quelltext 1: 2:
| DateTime tdate = DateTime.Parse(tbtermindatum.Text); DateTime ttime = DateTime.Parse(tbterminzeit.Text); | |
Du hast bisher überhaupt nichts davon geschrieben, wie ein Wert (Datum bzw. Zeit) in die TextBox eingegeben werden soll: welches Format, welches Trennzeichen. Mit der MaskedTextBox kann so etwas sauber gesteuert werden (die hatte ich bisher vergessen zu erwähnen).
"das funktioniert nicht" ist keine sinnvolle Beschreibung. Es gibt doch sicher eine Fehlermeldung. - Aber das gehört zu den Problemen mit DateTime. Es ist etwas umständlich, ein Datum mit einer Uhrzeit zu kombinieren.
conway96 hat folgendes geschrieben : |
3) warum muss ich alarm den kleinstmöglichen wert zuweisen?
C#-Quelltext 1:
| private DateTime alarm = DateTime.MinValue; | |
Aus praktischen Gründen. Wenn der Alarm ausgelöst wurde (MessageBox), dann weißt du Bescheid. Also braucht der Alarm nicht wiederholt zu werden. Wenn die Alarmzeit auf den Minimalwert gesetzt wird, kann sie niemals später als die aktuelle Zeit liegen. Damit verzichtet man auf eine zusätzliche Variable und Prüfung, ob der Alarm bereits gemeldet wurde; und du brauchst auch weiterhin nur einen Timer (siehe auch die Änderung mit der Alarmzeit bei 0 Sekunden).
conway96 hat folgendes geschrieben : |
4) warum "new"?
C#-Quelltext 1:
| alarm = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); |
warum "new"? |
Die Alarmzeit soll sich aus den genannten Bestandteilen zusammensetzen. Die einzelnen Bestandteile von DateTime sind read-only. Um einen der Werte zu ändern, muss eine vollständig neue Instanz erzeugt werden; und dazu dient eben new.
Und zur neuen Lösung:
1. In timer1_Tick stehen weiterhin die Bestandteile getrennt. Wozu eigentlich? Du willst doch nur die aktuelle Zeit anzeigen; dazu genügen doch eine oder zwei Zeilen - der ganze andere Kram kann entfallen.
2. In timer2_Tick werden die Strings übernommen. Du willst aber zwei Zeiten vergleichen, und das geht sinnvoll nur mit meinem Vorschlag: Die Eingabe muss nach dem Abschluss der Eingabe (also z.B. beim Verlassen der TextBox) in eine DateTime-Variable konvertiert werden; dieser Wert wird einfach verglichen - fertig (natürlich nicht auf Gleichheit, sondern auf >=). Wenn du zwei Zeiten vergleichen willst, nimm zwei Zeiten; wenn du zwei Strings vergleichen willst, dann nimm Strings usw.
Zitat: |
gibts dafür auch ne elegantere lösung? |
Siehe oben: Die Alarmzeit wird auf 0 Sekunden gesetzt und meldet sich damit beim ersten Aufruf des Sekunden-Timers.
Zitat: |
bei mir scheiterts an den grundlagen, |
Ich hoffe doch, du kümmerst dich darum, z.B. mit einem Buch oder wenigstens mit dem
OpenBook VC#.
Gruß Jürgen