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



  • eigentlich solle es schon c++/cli sein und mit .net zusammen hängen ...



  • ok eigentlich könntet ihr mir auch c# antworten das wäre nicht das Problem umzuschreiben



  • Woran hakt es denn genau?



  • Th69 schrieb:

    Woran hakt es denn genau?

    naja ich bin soweit das mit mein Programm die Uhrzeit ausgibt in einer readonly TextBox aber er gibt mir halt nur die Uhrzeit aus die es gerade ist und er aktualisiert es nicht ... wie frage ich die Uhrzeit alle sekunde oder Minute ab ?



  • Dafür kannst du einen Timer aus System::Windows::Forms verwenden.



  • inflames2k schrieb:

    Dafür kannst du einen Timer aus System::Windows::Forms verwenden.

    das hab ich jetzt auch gefunden gehabt 😉 vielen dank so nun hab ich bereits ein button erstellt und ne TextBox jetzt möchte ich das beim buttonclick Event wenn die TextBox wo mein "Termin" reinkommt das selbe ist mit der aktuellen Uhrzeit das sich das fenster vor allen anderen öffnet also bringwindowtotop oder so ... da habe ich aber nun echt null plan wie das funktioniert



  • Punkte und Kommas haben noch keinem geschadet. Es fällt echt schwer, deiner Aussage zu folgen.

    Du hast deinen Timer, der die Zeit in der Textbox aktualisiert.
    Zusätzlich hast du eine Textbox in der du eine Zeit eingibst, ist das korrekt?

    Was hat es jetzt aber mit dem Button auf sich, soll der Button Auslöser für das Öffnen des Fensters sein? - Ich hätte hier eher angenommen, das der Timer dies mit übernimmt.

    Um das Fenster im Vordergrund anzuzeigen müsstest du BringToFront aufrufen.



  • inflames2k schrieb:

    Punkte und Kommas haben noch keinem geschadet. Es fällt echt schwer, deiner Aussage zu folgen.

    Du hast deinen Timer, der die Zeit in der Textbox aktualisiert.
    Zusätzlich hast du eine Textbox in der du eine Zeit eingibst, ist das korrekt?

    Was hat es jetzt aber mit dem Button auf sich, soll der Button Auslöser für das Öffnen des Fensters sein? - Ich hätte hier eher angenommen, das der Timer dies mit übernimmt.

    Um das Fenster im Vordergrund anzuzeigen müsstest du BringToFront aufrufen.

    erstmal zu deiner aussage zwecks den Punkten und Kommas, ist wohl war, hätte ich paar setzen können...
    tut mir leid...

    so nochmal zum klarstellen :

    habe ein Label was aktuelle Uhrzeit per timer anzeigt

    timer1 = gcnew Timer();
    timer1->Tick += gcnew EventHandler(this, &Form1::uhrzeit);
    timer1->Interval = 2;
    timer1->Start();
    
    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;
    

    so und nun möchte ich in einer TextBox ein Termin eintragen können...
    mir ist egal obs mit nem button oder sonstigen funktioniert...
    ich möchte das wenn der Termin eintritt,das sich das Programm groß vor allem anderen auf dem Desktop öffnet ...

    nun verständlich ?



  • 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.


Anmelden zum Antworten