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



  • hallo an alle 😉

    habt ein wenig erbarmen mit mir bin erst seit 5 Wochen in der Lehre zur Fachinformatikerin in der Richtung Anwendungsentwicklung und hab noch nicht ganz so den Durchblick 😞

    so nun zu meinen Anliegen
    ich möchte gerne ein kleines Programm schreiben, welches mir die aktuelle Uhrzeit ausgibt, in dem ich ein Termin eintragen kann und welches, wenn der Termin eintritt, sich selbst öffnet und vor allen anderen Fenstern die geöffnet sind groß auf dem Desktop erscheint

    könnt ihr mir sagen bzw. schreiben und erklären wie ich das in der Windowsformanwendung schreiben kann?

    mfg loveling



  • Hallo,

    soll oder muß es wirklich C++/CLI sein? Denn WinForms solltest du damit nicht verwenden, s.a. den als "Wichtig" markierten Beitrag Windows Forms und Visual C++ MACHT KEINEN SINN!.
    Dann nimm besser sofort C# (gerade für Anwendungsentwicklung ist dies eine einfacher zu lernende Sprache als das native C++ - bedenke vorallem daß C++/CLI nur eine Interop-Sprache zwischen C++ und der .NET-Welt ist)!



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


Anmelden zum Antworten