Radio Button Gruppe deaktivieren



  • Hi all

    Situation:
    ich habe 2 Radiobuttons, bei denen nur jeweils einer ausgewählt sein darf.

    Wird ein Ereignis ausgelöst, z.B. OnButton1(), so soll das Editieren der Radiobuttons nicht mehr möglich sein. Sprich, beide Controls sind deaktiviert (=nicht mehr anwählbar/graue schrift).

    Situation II:
    Der Erste Radiobutton wird als "Grupp" definiert, damit kann ich im Klassen-Assistenten eine Membervariable setzen. Typ 'int' (= nicht gut, weil ich dass das Controler nicht disablen kann) oder Typ 'CButton'.

    Egal welchen Typ ich verwende, ich habe nur Zugriff auf das erste Element.
    Ich kann also zB. venn der erste RB vom Typ CButton ist folgende Methode anwenden:

    m_Radio1.EnableWindow(false); //deaktiviert das controll
    

    Wie zum Geier kann ich aber nun noch das 2. Controlelement deaktivieren? Weiss jemand wie und kann mir helfen? Definiere ich keinen der beiden RBs als GruppenElement, so kann ich keinen der RadioButtons im Klassenassistenten ansprechen.

    Thanks so much

    PS: Ich lobe euch dafür auch beim X-Mas Man, damit ihr mehr geschenke kriegt :xmas1:



  • // den 1. Radiobutton der Gruppe deaktivieren:
    ((TRadioButton*)RadioGroup1 -> Controls[1]) -> Enabled = false;



  • Gast: schrieb:

    // den 1. Radiobutton der Gruppe deaktivieren:
    ((TRadioButton*)RadioGroup1 -> Controls[1]) -> Enabled = false;

    Danke für die Hilfe, aber diese Codezeile versteh ich echt nicht. Auch die MSDN kennt 'TRadioButton' nicht. 😞



  • 1. Zeiger auf die untergeordneten Komponenten (in diesem
    Fall TRadioButton über die Eigenschaft Controls[int index]
    besorgen
    2. da es ein TControl-Zeiger ist, muss dieser explizit
    in TRadioButton* umgewandelt werden
    3. nun kann auf die Eigenschaften und Methoden zugegriffen
    werden:



  • Wenn Du zwei Radiobuttons hast und beide deaktiviert haben willst, warum deaktivierst Du nicht einfach den zweiten genauso wie den ersten?
    Du kannst beiden eine Membervariable zuordnen!



  • Airdamn schrieb:

    Wenn Du zwei Radiobuttons hast und beide deaktiviert haben willst, warum deaktivierst Du nicht einfach den zweiten genauso wie den ersten?
    Du kannst beiden eine Membervariable zuordnen!

    Ach ja, kann man das? Wie denn?
    Man muss einem RadioButton die "Gruppe" Option bei den Eigenschaften markeiren, damit das Element überhaupt im Klassenassistenten sichtbar wird (=ein Control).

    Wenn man beide als "Grupp" definiert, dann kann man zwar beiden eine MemberVariable zuweisen und daher auch einzeln ansprechen, doch dann agieren die Buttons auch als zwei eigenständige Gruppen!



  • Hallo sky21,

    du kannst auch aufs Win32 API ausweichen.
    Angenommen deine beiden Radiobuttons haben die IDs IDC_RADIOBUTTON1 und IDC_RADIOBUTTON2, dann gehts so

    ::EnableWindow(::GetDlgItem(m_hWnd, IDC_RADIOBUTTON1));
    ::EnableWindow(::GetDlgItem(m_hWnd, IDC_RADIOBUTTON2));
    

    Die "::" vor den Funktionsnamen stellen sicher, dass die API-Funktionen und nicht die Wrapper der MFC aufgerufen werden.



  • Warum so kompliziert?

    Entweder kannst du wa auch wie gewohnt per MFC machen:

    GetDlgItem(IDC_RADIOBUTTON2)->EnableWindow(FALSE);
    

    Oder du hakst das Gruppe beim zweiten an, ordnest ihm eine Controlvariable zu und machst den Haken wieder weg. 😃
    Du kannst auch alle Zeilen suchen, wo m_Radio1 drin vor kommt und auf m_Radio2 anpassen.



  • estartu_de & Uwe

    vielen Dank für die Hilfe. Hat echt geholfen (es funktioniert!!).

    @estartu_de:
    Die 2. von dir vorgeschlagene Methode viel mir auch ein, aber die ist selbst für mich "unschön", hehe.


Anmelden zum Antworten