Absturz bei EnableWindow()



  • Hallo zusammen,

    in meiner dialogbasierenden Anwendung öffne ich über einen Button einen
    zweiten Dialog. In diesem 2. Dialog befindet sich ein Optionsfeld und
    ein Editfeld, welches nur aktiviert ist, wenn das Optionsfeld "angekreuzelt" ist.
    Mit m_edit_feld.EnableWindow(true/false) in der Funktion, die beim Anklicken des Optionsfeldes aufgerufen wird, funktioniert das einwandfrei.

    Nun soll aber der aktuelle Zustand des Edit- und Optionsfeldes dem 2.Dialog übergeben werden. Dazu habe ich eine public Importfunktion, die nach der Instanziierung des Dialog2objektes aufgerufen wird.
    In dieser Funktion rufe ich dann m_edit_feld.EnableWindow(true/false) auf
    und es kommt zum Absturz. Das gleiche passiert mit m_edit_feld.EnableWindow(true/false) im Konstruktor.
    Der nachfolgende Code ist nur zur Erläuterung des Problems gedacht.
    Wo steckt der Fehler bzw. wie kann ich den Zustand des Editfeldes dynamisch beim Start des 2.Dialoges initialisieren?
    Für jeden sachdienlichen Hinweis wäre ich dankbar.

    MFG
    Andy

    //Dialog 1
    CDlg1::PushButton()
    {
     CDlg2 dlg2;
     dlg2.Import(true);
    }
    
    //Dialog 2
    CDlg2::Import(bool active)
    {
     m_edit_feld.EnableWindow(active); //-> verursacht Absturz
    }
    
    CDlg2::SelectDeselectOption()
    {
     m_edit_feld.EnableWindow(true/false); //-> funktioniert
    }
    


  • Dein Feld gibt es zu dem Zeitpunkt nicht.

    Du must eine membervariable machen, diese setzen und bei OnInitDialog verwenden um das Feld zu enablen



  • Ums genauer zu erklären.
    Du hast zwar eine Instanz deiner Dlg-Klasse aber da wurde nur der Konstruktor und einige andere Dinge aufgerufen. Dein Dialog wurde hier aber noch nicht erstellt. Dieser wir bei DoModal erstellt indem dann auch OnInitDialog aufgerufen wird. Jetzt wird der Dialog und seine Unterfenster (Controls) angezeigt und man kann auch erst jetzt darauf zugreifen.



  • Hallo zusammen,

    Danke für die Tips! OnInit eingefügt - jetzt funktioniert es.

    MFG
    Andy


Anmelden zum Antworten