Mehrere CheckBoxen auf checked = true prüfen - Wie?



  • Hallo Zusammen,
    ich habe auf meinem Formular mehrere CheckBoxen. Die Namen sind folgendermaßen aufgebaut:

    cb1...
    cb2...
    cbs1...
    cbs2...
    avf1...
    avf2...

    Ich möchte nun überprüfen, ob z.B. irgendeine CheckBox die im Namen mit cb anfängt checked auf true steht. Wie kann ich sowas machen?

    Danke im voraus.



  • Hallo

    Siehe FAQ hier im Forum, Abschnitt Komponenten benutzen, Thema Arrays von Komponenten.

    bis bald
    akari



  • Hallo akari,
    meinst du mit den Arrays das
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39211.html
    Damit kann ich leider nicht wirklich was anfangen.

    Ein weiterer Eintrag in der FAQ wäre folgendes:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39207.html
    Das sieht schon besser aus und würde mir weiterhelfen. Allerdings weiß ich nicht wie ich folgendes so ändere

    if (dynamic_cast<TLabel*>(Form1->Components[i])->Name == "Label1")
    

    das ich nur die CheckBoxen anspreche die im Namen am anfang ein z.B. ein "cb" stehen haben. Würde das mit

    if (dynamic_cast<TLabel*>(Form1->Components[i])->Name == "cb*")
    

    funktionieren?



  • Hallo

    Wenn du nichts damit anfangen kannst dann hast du dich nicht lange genug beschäftigt. Entsprechende Grundkenntnisse in Objektorientierter Programmierung, Speicherverwaltung und den Eigenheiten der VCL sind dafür allerdings schon notwendig (niemand hat behauptet es wäre einfach). Also schau dir nocheinmal den ersten FAQ-Link an.

    Der zweite von dir gepostete FAQ-Eintrag ist nicht ganz passend, es bräuchte schon einige Änderungen um damit deine Aufgabe zu erledigen.

    bis bald
    akari



  • if(cb1->Checked)
    ShowMessage("Sie haben CheckBox1 gewählt");



  • @Chakuza
    So könnte ich es natürlich auch machen. Allerdings habe ich ca. 15 CheckBoxen und ich dachte, es gibt da einen einfachereren Weg.

    @akari
    Den zweiten Link habe ich jetzt z.B. folgendermaßen umgebaut:

    AnsiString cbbestellt = "";
    
        for(int i=0; i < bestellung_suchen->ComponentCount; i++)
        {
            // oder eine spezielle Behandlung
            if (bestellung_suchen->Components[i]->ClassNameIs("TCheckBox"))
            {
                if (dynamic_cast<TCheckBox*>(bestellung_suchen->Components[i])->Name == "cb1"
    && dynamic_cast<TCheckBox*>(bestellung_suchen->Components[i])->Checked == true)
                    cbbestellt = "ok";
                if(cbbestellt == "ok")  {
                    bestellung_suchen->Label12->Caption = "richtig";
                } else {
                    bestellung_suchen->Label12->Caption = "falsch";
                }
            }
    
        }
    

    Da müsste ich jetzt aber wissen, wie ich bei "cb1" sagen kann, dass er alle CheckBoxen überprüfen soll die im Namen mit "CB" anfangen.

    Werde mir den anderen Link aber nochmal anschauen. Ob ich das damit auch hinbekomme. Sehe ich das nicht richtig, dass beim ersten Link Komponenten während der Laufzeit erzeugt werden?



  • einfach Substring von Namen nehmen und die ersten zwei Buchstaben auf "cb" überprüfen?

    if (dynamic_cast<TCheckBox*>(bestellung_suchen->Components[i])->Name.SubString(0,2) == "cb"
    && dynamic_cast<TCheckBox*>(bestellung_suchen->Components[i])->Checked == true)
    

    (ungetestet, kA ob es SubString bei Name gibt)

    greetz KN4CK3R



  • @ KN4CK3R
    Danke schön. Da hätte ich auch selber drauf kommen können. Damit funktioniert es.


Anmelden zum Antworten