Windows Forms Ereignisse



  • Puh, braucht wohl etwas Nerven mit mir hier im Forum 😉

    Wenn ich nun folgendes versuche

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	Form3->ShowModal();
    	zwischenresultat = 3;
    }
    

    und beim Debugger einen Haltepunkt bei zwischenresultat = 3; setze, wird der Haltepunkt erst erreicht, wenn ich Form3 wieder schliesse.

    Wenn ich jedoch

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	Form3->Show();
            this->Enabled = false;  // Hauptfenster disable
    	zwischenresultat = 3;
    }
    

    schreibe, wird der Haltepunkt sofot nach Knopfdruck erreicht.

    Wenn ich Sleep() anstelle von ShowModal() setze wird das ganze Programm unterbrochen.

    Springt das Programm bei ShowModal, solange ModalResult null ist aus der Funktion raus, oder wie muss ich mir das vorstellen, was macht denn ShowModal anders als Sleep, beide unterbrechen ja den Programmablauf.



  • Hallo

    Für alle drei Varianten gilt : Dein Programm arbeitet rein sequentiell.
    Selbst beim Beispiel mit Show. Es wird zuerst das zweite Form angezeigt und alle nötigen Messages und Events verarbeitet. Erst dann kehrt Show zurück zu der nächsten Zeile und führt zwischenresultat... aus. Da das so schnell geht bekommst du davon aber nicht viel mit.
    Aber du kannst dem Form3 ja mal ein OnShow-Event mit einer sinnvollen Zuweisung spendieren und dort einen Breakpoint setzen. Plötzlich wirst du mit dem Debugger merken das er in Form3 springt und den Show-Event abarbeitet. Erst wenn das erledigt ist wird mit zwischenresultat weitergemacht.

    bis bald
    akari



  • Was so nicht explizit erwähnt wurde: Die Timer-Funktion wird deswegen weiter ausgeführt, weil Timer Nachrichtengesteuert funktionieren. Deshalb wird die Timerfunktion, trotz des ShowModal-Aufrufs, weiter abgearbeitet.



  • ShowModal(Form3) == 
    repeat
    {
       Application->ProcessNonInputMessages();
    }
    until Form3 closes
    


  • 🙄



  • 😕



  • Na ja, was soll denn der Schwachsinn?!?



  • Kannst du mir sagen, warum du mich so angreifst? Ich wollte damit erklären, was ShowModal() bewirkt.



  • Da wär ich aber nie drauf gekommen, wenn Du es nicht noch dazu geschrieben hättest...



  • Lange Leitung... 😃


Anmelden zum Antworten