ShowWindow/EnableWindow Problem



  • Hallo Leute! Ich bastle gerade etwas mit C++ und dem MFC rum. Ich habe auf dem ersten Formular 3 Radiobuttons. Wenn man jetzt "A" ausgewählt hat und auf weiter klickt, soll sich ein zweiter Dialog öffnen, in dem sich 2 EditControls und 2 StaticText befinden, doch einer der beiden deaktiviert oder ganz weg. Bei Auswahl auf "B" eben jeweils die anderen beiden. Habe auch Controlvariablen verwendet.

    oid CTESTDlg::OnBnClickedButton1()
    {
    	UpdateData(1);
    	uDialog neuUf;
    
    		if (radio_auswahl == 0)
    	{
    		neuUf.GetDlgItem(IDC_EDIT1) ->ShowWindow(1);
    		neuUf.GetDlgItem(IDC_EDIT2) ->ShowWindow(0);
    	}
    	else if(radio_auswahl == 1)
    	{
    		neuUf.GetDlgItem(IDC_EDIT1) ->ShowWindow(0);
    		neuUf.GetDlgItem(IDC_EDIT2) ->ShowWindow(1);
    	}
    

    Kriege aber immer die Meldung

    Debug Assertion Failed!
    
    …\src\mfc\winocc.cpp
    
    Line:349
    

    Bitte Hilfe!!



  • Ich würde meinen, mit dem Anlegen der Klasseninstanz ist noch kein Fenster erschaffen, d.h. Du hast noch kein Window Handle, welches später von GetDlgItem verwendet werden möchte...

    Ciao MM



  • Ist es mit der Instanz noch nicht gemacht? Hast du einen Tip, wie man das anders lösen könnte ?



  • Ich hab den zweiten Dialog mit.DoModal() vor der if-Schleife und danach ausprobiert. Kommt aber immer der gleiche Fehler.



  • Leg 2 Membervariablen in der Klasse uDialog an, jeweils eine für jedes Edit, BOOL würde da reichen. dann kannst du nach erstellen deiner uDialog-Klasse diese entsprechend setzen und DoModal aufrufen. In der OnInitDialog deiner uDialog -Klasse dannst du die Variablen auslesen und dann ensprechen dein ShowWindow setzen

    uDialog.h
    {
    BOOL m_EDIT1;
    BOOL m_EDIT2;
    }
    
    oid CTESTDlg::OnBnClickedButton1()
    {
        UpdateData(1);
        uDialog neuUf;
    
            if (radio_auswahl == 0)
        {
            neuUf.m_EDIT1 = TRUE;
            neuUf.m_EDIT2 = FALSE;
        }
        else if(radio_auswahl == 1)
        {
            neuUf.m_EDIT1 = FALSE;
            neuUf.m_EDIT2 = TRUE;
        }
        neuUf.DoModal();
    }
    
    uDialog::OnInitDialog()
    {
        GetDlgItem(IDC_EDIT1) ->ShowWindow(m_EDIT1);
        GetDlgItem(IDC_EDIT2) ->ShowWindow(m_EDIT2);
    }
    

    das ist nur eine der viele Möglichkeiten und denke für dich die einfachste dein Problem umzusetzen



  • Vielen vielen Dank! So etwa habe ich mir das am Ende vorgestellt. Ich habe nur das OnInitDialog immer in die Klasse des Unterdialoges geschrieben!

    Nochmal danke!



  • z3rG schrieb:

    Vielen vielen Dank! So etwa habe ich mir das am Ende vorgestellt. Ich habe nur das OnInitDialog immer in die Klasse des Unterdialoges geschrieben!

    Nochmal danke!

    Da gehört das ja auch hin, Hab eigentlich nur vergessen die datei anzugeben wo das hin kommt oder anders gesagt bin ich davon ausgegangen das du weisst wo das richtig hin kommt


Anmelden zum Antworten