Steuerelemente im Dialog deaktivieren



  • Hi Leute

    Ich habe ein Programm mit einer Splitter Window erstellt. Aus der einen View rufe ich einen Dialog auf, in dem eine ComboBox enthalten ist. Ich möchte nun während der Laufzeit beim Aufruf des Dialogs diese ComboBox deaktivieren oder aktivieren. Ich hab schon einiges probiert aber jetzt steh ich am Anschlag. Der Code mit dem ich es jetzt zuletzt versucht habe sieht wie folgt aus:

    GetDlgItem(IDC_COMBO1)->EnableWindow(false);
    

    Offensichtlich findet er aber das dazugehörige Fenster (resp. Dialog) nicht. Jedenfalls generiert das Codestück einen Laufzeitfehler.

    Danke für eure Hilfe,

    Jonas



  • Probiere es mal mit einer Globalen Zeigervariable vom Typ CComboBox (oder wie immer die Klasse auch heißen mag).

    CComboBox *ComboAufDialog;
    

    Sobald dein Dialog mit der Combobox aufgerufen wird, speicherst du die Adresse der Membervariable in diesem Globalen Zeiger.

    ComboAufDialog = &MemberVarCombo;
    ComboAufDialog = GetDlgItem(ICD_COMBOBOX); // geht auch
    

    Ab jetzt kannst du diese Combobox wie gefolgt steuern:

    ComboAufDialog->ShowWindow(SW_HIDE);
    

    Es gibt aber auch noch andere Möglichkeiten.



  • suzi schrieb:

    Offensichtlich findet er aber das dazugehörige Fenster (resp. Dialog) nicht. Jedenfalls generiert das Codestück einen Laufzeitfehler.

    Wo steht dieser Code denn?



  • Der Code steht in der einen View und wird über einen Menüpunkt angewählt.

    Ich habe versucht das Steuerelement zu deaktivieren und anschliessend den Dialog zu starten.

    Jonas



  • suzi schrieb:

    Ich habe versucht das Steuerelement zu deaktivieren und anschliessend den Dialog zu starten.

    Du kannst das Steuerelement erst deaktivieren, wenn der Dialog erstellt wurde. Üblicherweise macht man das in OnInitDialog.



  • MFK schrieb:

    Du kannst das Steuerelement erst deaktivieren, wenn der Dialog erstellt wurde. Üblicherweise macht man das in OnInitDialog.

    Ich möchte nun während der Laufzeit beim Aufruf des Dialogs diese ComboBox deaktivieren oder aktivieren.

    Ich glaub das heist nicht nur beim start sondern zu jeder Zeit.



  • Nein es ist schon richtig das ich beim Aufruf weis ob ich die ComboBox anzeigen muss oder nicht.

    Im OnInitDialog hab ich es nun auch geschafft das Element zu deaktivieren. Ich habe dazu den ursprünglichen Code verwendet den ich zuerst versucht habe. Nur kann wegen der Document-View-Struktur aus der Dialogklasse nicht auf das Dokument zugreifen in welchem steht ob die ComboBox aktiviert oder deaktiviert werden soll.

    Jonas



  • Dann mach eine bool Variable in den Dialog, in die das Doc schreibt, ob die Combobox aktiviert werden soll oder nicht.



  • suzi schrieb:

    Nur kann wegen der Document-View-Struktur aus der Dialogklasse nicht auf das Dokument zugreifen in welchem steht ob die ComboBox aktiviert oder deaktiviert werden soll.

    Das wäre IHMO auch nicht sauber. Verpass der Dialogklasse einen bool-Member, in dem du bei der Erzeugung die Information ablegst, ob die Combobox aktiviert werden soll.



  • Na klar hätte ja kaum einfacher sein können. Jetzt funktioniert alles wie erwartet.

    Riesen Dank auch allen 👍

    Gruss Jonas


Anmelden zum Antworten