CheckBox-Problem



  • Hallo zusammen,

    habe auf einer Form zwei Komponenten des Typs TCheckBox.
    Nun ist es so, dass davon allerdings nur eine aktiv (Cheked = true) sein darf.

    hab das ganze so geregelt:

    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
       CheckBox2->Checked = false;
       CheckBox1->Checked = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::CheckBox2Click(TObject *Sender)
    {
       CheckBox1->Checked = false;
       CheckBox2->Checked = true;
    }
    //---------------------------------------------------------------------------
    

    allerdings stürzt das Programm, wenn ich erst die eine CheckBox betätige und dann die andere (dann sollte die erste ja eigentlich nicht mehr aktiv sein) ab mit der Meldung:

    EStackOverflow with message "stack overflow"

    Kann mir jemand sagen, was ich dort falsch mache?

    Thx

    Gruß
    MWJK



  • schau mal in die faq, da wird das problem glaub ich beschrieben!

    Allerdings sollte man für dieses verhalten doch eher eine radiogroup nehmen oder?



  • ser1al_ausgeloggt schrieb:

    schau mal in die faq, da wird das problem glaub ich beschrieben!

    Danke, dort schau ich mal - hatte zwar bis jetzt noch nichts gefunden, aber ich such mal.

    ser1al_ausgeloggt schrieb:

    Allerdings sollte man für dieses verhalten doch eher eine radiogroup nehmen oder?

    Ja, wäre theoretisch schon sinnvoller, aber das wollte ich eigentlich nicht.

    Gruß
    MWJK



  • MWJK schrieb:

    Ja, wäre theoretisch schon sinnvoller, aber das wollte ich eigentlich nicht.

    Dann hoffe ich, dass das Programm nur für Deinen privaten Einsatz ist. Als Anwender stört es mich ernorm, wenn sich Oberflächenelemente nicht so verhalten, wie ich es erwarte. Und von einer CheckBox erwarte ich definitiv nicht das Verhalten einer RadioGroup. 😉



  • Okay, überredet - ist sinnvoller und das Programm ist nicht nur für meinen Privatgebrauch.

    Gruß
    MWJK



  • Naja, es kann schon sinnvoll sein wenn checkboxen andere zurücksetzen, oder automatisch mit aktivieren.

    Allerdings gehts nicht mit true oder false sondern zB. so:

    //Bei Auswahl <Niemand> werden die anderen Checkboxen deaktiviert
    
    void __fastcall TForm2::CheckBoxNiemandClick(TObject *Sender)
    {
    if (CheckBoxNiemand->Checked)
     {
     CheckBoxFFM->State=cbUnchecked;
     CheckBoxFFM->Enabled=false;
     CheckBoxInstandhaltung->State=cbUnchecked;
     CheckBoxInstandhaltung->Enabled=false;
     CheckBoxFertigung->State=cbUnchecked;
     CheckBoxFertigung->Enabled=false;
     }
     else
     {
     CheckBoxFFM->Enabled=true;
     CheckBoxInstandhaltung->Enabled=true;
     CheckBoxFertigung->Enabled=true;
     Information=" ";
     }
    }
    

    Ist zwar etwas aus dem Zusammenhang gerissen, aber vielleicht hilfts ja...



  • Hallo

    nein das wird nicht helfen. Du setzt aus einem Control heraus die Zustände von anderen Controls, und damit hats sichs.
    MWJK hingegen hat das Problem, das sich bei jedem Setzen einer CheckBox auch ein Click-Event für diese CheckBox ausgelöst wird. Das bedeutet das die ausgewählte CheckBox durch das Setzen der zweiten CheckBox für die zweite CheckBox auch ein OnClick-Event ausgelöst wird. Und in dem Event wird nun wieder die erste CheckBox gesetzt...
    eine Endlosschleife aus Funktionsaufrufen, die das Programm abstürzen läßt sobald der Stack voll ist.

    Die einzige Möglichkeit dieses Problem zu lösen ist es eine Art Wächter-Member für das Form zu integrieren, um bei jedem gewollten Eintritt in eine der Eventmethoden zu Verhindern das ungewollt weitere Events ausgeführt werden.

    Der Wechsel zu RadioGroup ist aber eindeutig vorzuziehen.

    bis bald
    akari



  • Habe nun auch sinnvollerweise gewechselt, auch wenn mir bei der RadioGroup nicht ganz so gefallen hat, dass die Auswahlmöglichkeiten dort untereinander sind - hätte sie lieber nebeneinander gehabt, aber was solls ....

    Danke für die vielen Antworten von euch allen!

    Gruß
    MWJK



  • MWJK schrieb:

    ...hätte sie lieber nebeneinander gehabt, aber was solls ....

    Geht doch. Siehe TRadioGroup::Columns.



  • Joe_M. schrieb:

    MWJK schrieb:

    ...hätte sie lieber nebeneinander gehabt, aber was solls ....

    Geht doch. Siehe TRadioGroup::Columns.

    Hey cool, danke!!

    Gruß
    MWJK


Anmelden zum Antworten