label-Inhalt nur für bestimmte Zeit einblenden



  • Hallo Freunde,

    sitze von einem Problem, wo ich keine Lösung finden kann. Ich möchte, dass der Inhalt eines Labels (label1->text) nur für eine bestimmte Zeit ausgegeben wird, z.B. für 10 Sekunden, dann aber wieder verschwindet. Ich hatte zuerst folgenden Ansatz gewählt:

    private: System::Void ButtonShow_Click(System::Object^  sender, System::EventArgs^  e) {
    			this->label1->Text = Resolution.ToString();
    			Sleep(10000);
    			this->label1->Text = "";
    		 }
    

    Doch der Wert der Variable (Resolution) wird nicht ausgegeben. Wenn ich Sleep + die untere nächste Zeile degradiere, so wird der Wert ausgegeben, jedoch dauerhaft. Falls jemand eine Lösung hat, würde ich mich sehr freuen!

    Viele Grüße
    parabolis



  • Du legst auch den kompletten Thread schlafen, d.h. das Fenster kann nicht neu gezeichnet werden.
    Stattdessen könntest du Timer bemühen:

    // statt des Sleep-Aufrufs
    SetTimer(/*Fensterhandle*/,
        1, // ID
        10000, // Zeit
        NULL); // keine CB_Funktion
    

    Und dann bei Erhalt der Nachricht WM_TIMER den Text des Labels löschen und per KillTimer den Timer freigeben.

    Hast du denn eigentlich eine Fenster-Callback-Funktion? Ich kenne mich mit deiner verwendeten Sprache leider nicht aus.



  • Das sieht mehr nach .NET aus..

    Da könntest du dann diesen Timer verwenden.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo , an alle!!
    Ich bin hier neu in diesem Forum, ausdiesem Grunde bitte ich euch gnädig mit mir zu sein.
    Das ist mein erstes Projekt mit C++/Cli das ich für meine Studium mache.
    Leider gab es nur sehr wenig info von meinem Prof wie das alles Funktioniert mit Windows Forms.

    Ich habe das selbe Problem wie mein Vorgänger.

    ich möchte ein label bzw in meinem Fall eine Textbox die display heist anzeigen lassen für 10 sek und dann soll,
    duch eine switch case anweisung der Text ersetz werden duch einen neuen Text.

    Leider habe ich schon alles mögliche probiert mit dem Timer aber ich krieg das nicht zum laufen.

    Könnte mir einer Schritt für Schritt erklären wie der Timer Funktioniert und wie er anzuwenden ist.

    Mein Program soll ein Cola Automat sein.

    [code]
    
    private: System::Void button_1Eur_Click(System::Object^  sender, System::EventArgs^  e) {
     				automat.einwurf(1);
    
    				if(automat.Geld<=2){
    				display->Text ="Bitte werfen Sie Geld ein:\r\n"+"\t\t\t\t\t"+automat.Geld.ToString();
    				}
    				else{
    				 fkt_Display(1);
    				automat.Geld=2;
    				return ;
    					}
    
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
    
    			 }
    void fkt_Display(int task){
    
    		switch(task){
    		case 1: 
    
    			display->Text ="Bitte werfen Sie Geld ein:\r\n"+"\t\t\t\t\t"+Convert::ToString(automat.Geld);
    			break; 
    
    		case 2:
    			timer1->Start();
    			display->Text ="Zu viel Geld eingeworfen\r\n"+Convert::ToString(automat.Geld);
    			timer1->Stop();
    			task=2;
    
    			break;
    
    		}
    


  • Das sollte Dir helfen...

    [url=https://msdn.microsoft.com/de-de/library/system.windows.forms.timer.tick(v=vs.110).aspx] Link
    [/url]
    Sonst einfach nochmals melden.