projekt welches uhrzeit ausgibt, einen termin aufnimmt,und an diesen "erinnert"



  • Dann prüfe halt im EventHandler des TickEvents, ob die Zeit in der Textbox gleich der aktuellen Zeit ist. Wenn das der Fall ist, rufst du this->BringToFront(); auf und dann hast es.



  • wie prüf ich denn ob die zeit in der TextBox glech der Label zeit ist ?
    habe es so geschrieben :

    void uhrzeit(Object^ sender,EventArgs^ e)
    {
    String^ z;
    DateTime zeit;
    zeit = DateTime::Now;	
    z = zeit.ToString();
    z = z->Remove(0, 11);
    this->label1->Text = z;
    if (textBox1->Text == z)
    this->BringToFront();
    }
    

    aber da passiert nichts..
    was ist mein fehler ?



  • Zum ersten macht dein Remove bei deinem Datum keinen Sinn. Dafür kann man das gewünschte Format bei DateTime.ToString() übergeben.

    Ein bisschen selbst recherche wäre zumindest von deiner Seite her noch gut. Da ich mal nicht so sein will mein Code, mit dem ich es gerade getestet habe:

    this->lblDateTimeNow->Text = DateTime::Now.ToString("HH:mm:ss");
    
    if(this->lblDateTimeNow->Text == this->textBox1->Text)
    {
    	this->Focus();
    	this->BringToFront();
    }
    

    Dennoch gilt weiterhin der Hinweis von Th69 zum Thema C++/CLI und Windows Forms.



  • Dankeschön, habe das eben getestet.
    aber es funktioniert immernoch nicht...
    es wird nicht vor den geöffneten fenstern angezeigt ...
    was hab ich denn da nun noch als Fehler drin?

    Label^ label1;
    		TextBox^ textBox1;
    		Timer^ timer1;
    
    		Form1(void)
    		{
    		InitializeComponent();
    
    		label1 = gcnew Label;
    		label1->Location = Point(5,10);
    		label1->Width = 60;
    		Controls->Add(label1);
    
    		timer1 = gcnew Timer();
    		timer1->Tick += gcnew EventHandler(this, &Form1::timer1Tick);
    		timer1->Interval = 2;
    		timer1->Start();
    
    		textBox1 = gcnew TextBox;
    		textBox1->Location = Point(5,35);
    		textBox1->Width = 50;
    		textBox1->MaxLength = 8;
    		Controls->Add(textBox1);
    		}
    
    	void timer1Tick(Object^ sender,EventArgs^ e)
    	{
    		this->label1->Text = DateTime::Now.ToString("HH:mm:ss");
    		if(this->label1->Text == this->textBox1->Text)
    		{ 
    			this->Focus(); 
    			this->BringToFront(); 
    		}
    
    	}
    

    also das ist derzeit der komplette code



  • this->label1->Text = DateTime::Now.ToString("HH:mm:ss"); 
    if(label1->Text == textBox1->Text) 
    	{
    		this->TopMost = true;
    		this->WindowState::set(FormWindowState::Normal);
    		this->TopMost = false;
    	}
    


  • Doug_HH schrieb:

    this->label1->Text = DateTime::Now.ToString("HH:mm:ss"); 
    if(label1->Text == textBox1->Text) 
    	{
    		this->TopMost = true;
    		this->WindowState::set(FormWindowState::Normal);
    		this->TopMost = false;
    	}
    

    vielen lieben dank damit funktionierts 😉



  • Ah natürlich, an den Fall das ein anderes Fenster TopMost gesetzt haben könnte, habe ich nicht gedacht. Aber ansonsten sollte meine Variante auch bei so ziemlich jedem anderen Fenster funktionieren.



  • Was soll denn dieser Quatsch, die Zielzeit alle paar Millisekunden mit der aktuellen Zeit (über strings) zu vergleichen? Und sowas wird auch noch einem Anfänger empfohlen? 😮

    Nach Eingabe einer Zielzeit muss der Timer genau einmal aufgezogen werden und bei Ablauf einmal feuern um das Fenster in den Vordergrund zu bringen. Dazu Zielzeit abzüglich aktueller Zeit rechnen, in Millisekunden umwandeln und schon hat man das Interval für den Timer.

    Was übrigens, wenn die Zielzeit einige Tage in der Zukunft liegt? Ist nicht schön die ganze Zeit eine Anwendung laufen zu haben.
    Dann wäre das richtige Thema, wie man einen Windows Service erstellt, welcher dann mit obiger Logik eine Form anzeigt.
    Im Falle eines PC-Neustarts zwischendurch kommt noch dazu, die Zielzeit in einer Datei zu speichern.



  • Im Prinzip muss ich µ Recht geben, fände ich auch die bessere Lösung.
    Aber da loveling schon halb auf dem Wege der Lösung war, muss man ihn ja nicht gleich das Rad neu erfinden lassen. Sein Weg war nicht elegant aber Gangbar. Das man einen Code noch verbessern kann ist fast immer so.
    Aber auch ich als Noob freu mich stets darüber, wenn ich merke das ich nicht ganz falsch lag.
    Und ob C++/CLI für den ein oder anderen Sinn macht, hilft niemanden der vor einem Problem steht.



  • Hallo µ,

    ich bin schon davon ausgegangen das er ein vernünftiges Timerinterval festlegt.

    Die Möglichkeit, dies sauber über einen einzigen Timer-Tick durchzuführen hat er ja weiterhin, wenn er beim Starten des Timers das Interval auf die Differenzzeit festlegt.

    // EDIT: Außerdem war sein Anwendungsfall ja so gestrickt, das er in einem label die aktuelle Zeit ausgeben wollte.



  • so hallöchen erst heut wieder geschafft rein zu schauen..

    als aller erstes will ich mal klarstellen, dass ich kein "ER" bin sondern eine "SIE" ...danke

    und als nächstes es war schon so geplant wie es hier geschrieben wurde...
    mit Label und einer TextBox ...

    nun habe ich ein weiteres Problem
    habe die wndproc schon geändert, das die TextBox nur noch zahlen und ":" erlaubt bzw halt alles andere wichtige wie copy,paste und weiteres...

    möchte jetzt aber noch das die TextBox validiert wird sozusagen das es nur als richtig gilt,wenn an 3. und an 6. Position auch ein ":" ist ..

    und das die stunde höchstens 12 bzw 24 sein darf und Minute und sekunde höchstens 60...

    könnt ihr mir da noch weiterhelfen ?

    mfg Loveling



  • Du könntest mittels RegularExpressions die Validierung des Textes durchführen.



  • inflames2k schrieb:

    Du könntest mittels RegularExpressions die Validierung des Textes durchführen.

    wenn ich wüsst wie das funktioniert, würde ich das machen 😢 hab nur leider kein blassen schimmer -.-



  • Es gibt da eine große Doku von Microsoft über das .NET Framework. Darin findest du eigentlich so ziemlich alles.

    C++/CLI Regular Expressions

    Und um dir das erstellen / finden eines passenden Ausdrucks zu erleichtern:

    Regexlib


Anmelden zum Antworten