Messagebox beenden



  • Hallo!
    Gibt es eine Funktion mit der eine Messagebox wieder geschlossen werden kann wenn man auf Abbrechen klickt? Hab nirgendwo was gefunden.
    Vielen Dank schon mal



  • Aloha,

    häh ? Was macht denn die Messagebox, wenn Du auf Abbrechen klickst ?

    Grüße

    BOA



  • hi
    dann wird das ganze programm beendet. ich mlchte aber das nur die messagebox beendet wird und ich die eingaben im programm noch mal ändern kann.



  • Hallo,

    Buddy schrieb:

    dann wird das ganze programm beendet.

    dann führst du nach dem Abbrechen der MessageBox etwas aus, das zum Schließen führt. Wenn du den Fall "Abbrechen" mit einem korrekten "if" behandelst, dann mußt du auch dafür sorgen, daß nicht abgebrochen wird. Im Falle eines OnOk-Handlers heißt das z.B., daß du nicht die Basisklassen-Version CDialog::OnOk() aufrufen darfst, ob das bei dir so ist, darüber läßt sich ohne weiteren Code nur spekulieren...

    MfG



  • hast recht. reicht es wenn man die ID von dem Button ändert oder muss ein komplett neuer eingefügt werden? (bin noch anfänger)Bis jetzt mach ich das so.

    void CTankstelleDlg::OnOkbutton()
    {
         iReturnMessageBox = MessageBox(MessageBoxFrage,MessageBoxText,MB_OKCANCEL | MB_ICONQUESTION | MB_SETFOREGROUND);
    		if(iReturnMessageBox == IDOK)
    {
         //speichern und beenden
    }
    else if(iReturnMessageBox == IDCANCEL)
    {   
        //das ist das Problem
    }
    


  • die ID mußt du nicht ändern, wenn du einen Ok-Button hast, der sich wie ein Standard-OK-Button verhalten soll, dann gibt es dafür keinen Grund. Aber ich habe ja schon angedeutet, daß der Aufruf von CDialog::OnOK() entscheidend ist, läßt man ihn weg, wird der Dialog nicht geschlossen (und auch die üblichen Validierungen werden nicht durchgeführt), ruft man das auf, dann wird der ganz normale Schließ-Vorgang eingeleitet. Also:

    void CTankstelleDlg::OnOkbutton()
    {
         iReturnMessageBox = MessageBox(MessageBoxFrage,MessageBoxText,MB_OKCANCEL | MB_ICONQUESTION | MB_SETFOREGROUND);
            if(iReturnMessageBox == IDOK)
            {
                  //speichern und beenden
                  ...
                  // der folgende Aufruf sorgt für das korrekte Beenden
                  CDialog::OnOK();
            }
            else if(iReturnMessageBox == IDCANCEL)
            {   
                // das ist jetzt kein Problem mehr, denn:
                // wenn hier kein CDialog::OnOK() steht, passiert auch nix
            }
    }
    

    MfG



  • So ist das also.
    Besten Dank jedenfalls jetzt gehts genau so wie ich wollte. 😃


Log in to reply