Assertion beim Aktivieren einer Checkbox



  • Hallo!

    Ich habe ein Problem mit einem Dialog und einer darin enthaltenen Checkbox. Ich möchte, daß die Checkbox aktiviert ist, wenn sich der Dialog öffnet. Aber, wenn ich im Konstruktor des Dialoges den Befehl

    m_chkbLimit.SetCheck(BST_CHECKED);
    

    aufrufe, bekomme ich eine Debug-Assertion in afxwin2.inl, Line: 590. Wenn ich dann auf "Ignorieren" drücke erscheint der Dialog, aber die Checkbox ist nicht aktiviert.

    Kann mir hier jemand helfen?


  • Mod

    Da Du nicht schreibst welcher ASSERT kommt und welche MFC Version Du aus welchem VS Du benutzt ist das nur Rätselraten...

    Zeig doch mal die Zeile.

    Ich tippe mal darauf, dass m_hWnd NULL ist, d.h. dieser Variable wurde kein Control zugeordnet.



  • Hallo!

    Danke für die Antwort. Ich verwende Visual C++ 6.0. Hab mir im Debugger mal den Wert für m_chkbLimit angesehen. Dort steht 'CButton hWnd = 0x00000000'. Nehme mal an, daß das der Wert für NULL ist (bin eigentlich kein C++ Programmierer, sondern komme aus der Java-Ecke).

    Wie komme ich denn jetzt an die Komponente ran? Hab es auch schon mit

    ((CButton*) GetDlgItem(IDC_CHECK1))->SetCheck(BST_CHECKED);
    

    probiert. Geht aber auch nicht 😞


  • Mod

    Dann gibt es die ID IDC_CHECK1 nicht!



  • Ja, hab es mir gerade im Debugger angesehen. Da steht wirklich "IDC_CHECK1 Symbol nicht gefunden".

    Das komische ist nur, daß wenn ich auf die Eigenschaften der Checkbox im Designer klicke, die Checkbox definitiv die ID 'IDC_CHECK1' hat und das Visual Studio auch in der AFX_DATA_MAP die Zeile

    DDX_Control(pDX, IDC_CHECK1, m_chkbLimit)
    

    angelegt hat 😕


  • Mod

    Dann verstehe ich Dein Problem nicht. Die DDX_COntrol Zeile schmeißt einen ASSERT, wenn das Control nicht im Dialog-Template vorhanden ist.



  • EinGast schrieb:

    Ja, hab es mir gerade im Debugger angesehen. Da steht wirklich "IDC_CHECK1 Symbol nicht gefunden".

    Das komische ist nur, daß wenn ich auf die Eigenschaften der Checkbox im Designer klicke, die Checkbox definitiv die ID 'IDC_CHECK1' hat und das Visual Studio auch in der AFX_DATA_MAP die Zeile

    DDX_Control(pDX, IDC_CHECK1, m_chkbLimit)
    

    angelegt hat 😕

    Das ist schon richtig so. IDC_CHECK1 ist keine Variable sondern ein define. (Schau mal in die ressource.h)

    Zeig doch mal den Code drumherum. Ich vermute stark, dass du in der Zeile drüber die Dialogvariable deklarierst und eine drunter DoModal aufrufst. In der Kombination tritt die Frage immer wieder auf. 😉

    Mach eine Wertvariable für die Checkbox und füll die, dann geht der Rest von alleine. 🙂



  • Hallo!

    Danke nochmal für die Hilfe!

    Hab es jetzt hinbekommen 🙂

    Ich aktiviere die Checkbox jetzt in der 'OnShowWindow' Methode und nicht mehr im Konstruktor des Dialoges. Kann es sein, daß man im Konstruktor noch nicht auf andere Controls im Dialog zugreifen kann?

    Habe allerdings noch eine letzte Frage: Kann ich einen Button irgendwie unsichtbar machen? Habe nämlich keine SetVisible-Methode oder sowas Ähnliches gefunden.



  • EinGast schrieb:

    Hallo!

    Danke nochmal für die Hilfe!

    Hab es jetzt hinbekommen 🙂

    Ich aktiviere die Checkbox jetzt in der 'OnShowWindow' Methode und nicht mehr im Konstruktor des Dialoges.

    OnInitDialog ist gängiger.

    Kann es sein, daß man im Konstruktor noch nicht auf andere Controls im Dialog zugreifen kann?

    Genau so ist es. Erst nach dem OnInitDialog der Basisklasse geht das.

    Habe allerdings noch eine letzte Frage: Kann ich einen Button irgendwie unsichtbar machen? Habe nämlich keine SetVisible-Methode oder sowas Ähnliches gefunden.

    ShowWindow heißt die. 🙂



  • Hallo estartu!

    Danke für die Antworten! 👍

    Langsam wird mir der ganze Ablauf klarer!


Log in to reply