Laden...

Uhrzeit auslesen für Wecker

Erstellt von Kuchen vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.501 Views
K
Kuchen Themenstarter:in
5 Beiträge seit 2016
vor 8 Jahren
Uhrzeit auslesen für Wecker

Hallo,

ich hatte vor 5 Jahren in der Schule 2 Jahre Programmierung mit C#, seitdem habe ich nicht mehr damit gearbeitet.

Weil ich in der letzten Zeit einfach mal Lust hatte, wieder ein bisschen was zu programmieren habe ich wieder angefangen. Projekt: Wecker

Nun zu meinem Problem:

Ich habe einen Timer erstellt welcher die aktuelle Uhrzeit in einer masked textbox ausgibt

        private void timer2_Tick(object sender, EventArgs e)
        {
            maskedTextBox1.Text = DateTime.Now.ToShortTimeString();
        }

Nun habe ich eine weitere masked textbox erstellt und möchte dass der Benutzer hier ein Wunsch Uhrzeit eingeben kann. Das Format ist mir eigentlich egal, da ich es eh nur selber benutze.

Wenn sich die Uhrzeiten gleichen soll dann etwas ausgegeben werden z.B. Sound oder ne Messagebox (Die Ausgabe ist kein Problem, allerdings die eingabe und der abgleich)

Ich habe es mir so vorgestellt:

        private void btweckerstart_Click(object sender, EventArgs e)
        {
            if (maskedTextBox1.Text = maskedTextBox3.text)
            {

                MessageBox.Show("test");
            }

        }

Das dies nicht so einfach geht, war mir schon klar aber ich komme leider nicht weiter. Bitte Helft mir 😃

J
251 Beiträge seit 2012
vor 8 Jahren
if (maskedTextBox1.Text = maskedTextBox3.text)

Ein '=' ist eine Zuweisung und kein Vergleich.

Ansonsten mit dem Debugger ran und anschauen wie deine Eingaben aussehen.
bzw. dein Problem genauer erläutern

[Artikel] Debugger: Wie verwende ich den von Visual Studio?
[FAQ] Wie finde ich den Einstieg in C#?

K
Kuchen Themenstarter:in
5 Beiträge seit 2016
vor 8 Jahren

So sieht die Meldung aus

Fehlermeldung:
"System.Windows.Forms.MaskedTextBox" enthält keine Definition für "text", und es konnte keine Erweiterungsmethode "text" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.MaskedTextBox" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?

3.003 Beiträge seit 2006
vor 8 Jahren

Davon abgesehen ist das Click-Ereignis eines Buttons irgendwie ungünstig. Du müsstest in dem Moment klicken, wo deine eingestellte Zeit EXAKT die aktuelle Zeit ist - schwierig.

Du kannst aber bei jedem Tick des Timers prüfen, und nicht die Texte, sondern die "echten" DateTimes vergleichen.


private void timer2_Tick(object sender, EventArgs e)
{
    maskedTextBox1.Text = DateTime.Now.ToShortTimeString();
    if(DateTime.Parse(maskedTextBox2.Text) < DateTime.Now) //Weckzeit überschritten
    {
         MessageBox.Show("ALARM!");
    }
}

Und schau dir das MVC-Pattern mal an. Der Code-Behind dort wird schnell zur unschönen Angewohnheit.

LaTino

Edit:

"System.Windows.Forms.MaskedTextBox" enthält keine Definition für "text"

Ach, komm schon. Groß- und Kleinschreibung!

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

K
Kuchen Themenstarter:in
5 Beiträge seit 2016
vor 8 Jahren

Davon abgesehen ist das Click-Ereignis eines Buttons irgendwie ungünstig. Du müsstest in dem Moment klicken, wo deine eingestellte Zeit EXAKT die aktuelle Zeit ist - schwierig.

Du kannst aber bei jedem Tick des Timers prüfen, und nicht die Texte, sondern die "echten" DateTimes vergleichen.

  
private void timer2_Tick(object sender, EventArgs e)  
{  
    maskedTextBox1.Text = DateTime.Now.ToShortTimeString();  
    if(DateTime.Parse(maskedTextBox2.Text) < DateTime.Now) //Weckzeit überschritten  
    {  
         MessageBox.Show("ALARM!");  
    }  
}  
  

Das wars danke! 😃

K
Kuchen Themenstarter:in
5 Beiträge seit 2016
vor 8 Jahren

eine frage habe ich zu deine lösung noch

Wenn die Zeit überschritten wird, dann bekomme ich eine Messagebox zu sehen. Diese erscheint dann aber 999x quasi weil deine Bedingung immer erfüllt wenn die angegebene Zeit überschritten wurde.

Wie kann ich das umgehen.

ein versuch mit einem Button "Stop"

timer2.enable = false

funktionierte nicht, weil ich in der Haupt form nicht mehr klicken kann, wenn die massageboxen im Vordergrund sind

771 Beiträge seit 2009
vor 8 Jahren

Setze einfach im Timer_Tick diese Codezeile (vor der MessageBox).

3.003 Beiträge seit 2006
vor 8 Jahren

(in der Hoffnung, dass Cat keinen Schlaganfall beim Posten hatte 😄

eine frage habe ich zu deine lösung noch
Wenn die Zeit überschritten wird, dann bekomme ich eine Messagebox zu sehen. Diese erscheint dann aber 999x quasi weil deine Bedingung immer erfüllt wenn die angegebene Zeit überschritten wurde.

Wie kann ich das umgehen.

Das sind jetzt nicht wirklich schwierige Fragen, ein bisschen muss man schon merken, dass du mehr als 10 Sekunden nachgedacht hast. Wie wärs, eine Variable "isMessageBoxShown" als flag benutzt?


if(!_isMessageBoxShown)
{
    _isMessageBoxShown = true;
    MessageBox.Show(); 
}

Bitte beachte, dass das Forum für konkrete Fragen zu konkreten Problemen gedacht und etwas Eigeninitiative sehr erwünscht ist.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

771 Beiträge seit 2009
vor 8 Jahren

@LaTino: was willst du mir sagen (schwer-von-begriff)?

K
Kuchen Themenstarter:in
5 Beiträge seit 2016
vor 8 Jahren

sry, aber ich bin wirklich kein Profi in C# sonst würde ich nicht fragen und schon garnicht im Bereich "Grundlagen"

desweiteren ist mir auch aufgefallen, dass mit deiner Lösung z.B. 03:00 nicht funktioniert, es erscheint sofort die Messagebox.

mit dem genauen abgleich == erscheint garkeine messagebox, könnte das an dem Timer Intervall liegen?

Z
403 Beiträge seit 2007
vor 8 Jahren

Nein, aber weil:

Setze einfach im Timer_Tick diese Codezeile (vor der MessageBox).

so aussieht als wärst du abgelenkt worden o.ä.

771 Beiträge seit 2009
vor 8 Jahren

Ich meine die vom OP im Post zuvor:


timer2.enable = false

Richtigerweise muss es natürlich


timer2.Enabled = false;

lauten.

Seid ihr so schwer von Kapee? 😉

16.835 Beiträge seit 2008
vor 8 Jahren

sry, aber ich bin wirklich kein Profi in C# sonst (...) dass mit deiner Lösung z.B. 03:00 nicht funktioniert, es erscheint sofort die Messagebox.

Gerade für Anfänger haben wir Artikel wie [Artikel] Debugger: Wie verwende ich den von Visual Studio?, sodass eben solche Anfänger auch schnell selbst ohne fremde Hilfe Fehler finden und weiter kommen.

Mit dem Debugger findest Du 100% den Grund dieses "funktioniert nicht", wenn Du Dich an den Artikel hälst.

3.003 Beiträge seit 2006
vor 8 Jahren

Seid ihr so schwer von Kapee? 😉

Jaaaaaaa! Ich hab extra mit meinem Post noch gewartet, weil ich dachte, du wärst am editieren xD

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)