RadioGroup bekommt nicht den Focus



  • Hallo,

    ich bin am Verzweifeln 😡
    Ich will über einen Button ein RadioGroup anzeigen, um dann über die Pfeiltasten eine Auswahl treffen zu können.
    Leider schaffe ich es nicht, das RadioGroup den Focus erhält.
    Kann mir jemand sagen, wo mein Fehler liegt?

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
        RadioGroup1->Items->Clear();
        RadioGroup1->Items->Add("Auswahl 1");
        RadioGroup1->Items->Add("Auswahl 2");
        RadioGroup1->Items->Add("Auswahl 3");
        RadioGroup1->ItemIndex = 0;
        RadioGroup1->Visible = false;
    }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        RadioGroup1->Visible = true;
        RadioGroup1->Focused();
    }
    //---------------------------------------------------------------------------
    

    Vielen Dank
    DG2003



  • Hallo

    Die Methode Focused ist eine reine Abfrage und verändert nichts. Du brauchst die Methode SetFocus.

    bis bald
    akari



  • danke akari

    hast Recht! Der Fehler ist mir passiert, als ich durch Copy/Past mein Testtool aus meiner Anwendung heraus erstellt und noch schnell "Experimantalcode" entfernt habe. Mein Fehler. 😡
    Ändert leider nichts am Ergebnis: RadioButton bekommt erst dann den Focus, nachdem ich ihn mit der Maus angeclickt habe.



  • Google liefert mir folgendes:

    RadioGroup1->Visible = true;
    dynamic_cast<TRadioButton*>(RadioGroup1->Controls[RadioGroup1->ItemIndex])->SetFocus();
    


  • Linnea schrieb:

    Google liefert mir folgendes:

    Ich hab deine Lösung jetzt nicht ausprobiert, aber warum ists denn so, dass SetFocus() hier nicht funktioniert? Ich hatte die Situation auch schon ofters, auch gerade nachdem ich eine Komponente mit "Visible = true" sichtbar gemacht habe.



  • wahrscheinlich weil die RadioGroup an sich keine Element mit Focus ist, sondern nur die einzelnen Buttons, denn diese erhalten ja den Focus und nicht die komplette Gruppe
    [Edit] im Fall der RadioGroup ist es auch völlig unwichtig ob sie vorher nicht sichtbar war, sobald man auf den Button klickt, hat der Button den Focus und die RadioGroup kann sie nur über den Focus eines der RadioButton wieder erhalten



  • So, jetzt bin ich wieder da.

    Linnea danke dir, der Tip war gut, so geht es:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        RadioGroup1->Visible = true;
        dynamic_cast<TRadioButton*>(RadioGroup1->Controls[RadioGroup1->ItemIndex])->SetFocus();
    }
    

    Danke an alle

    DG2003



  • Linnea schrieb:

    dynamic_cast<TRadioButton*>(RadioGroup1->Controls[RadioGroup1->ItemIndex])->SetFocus();
    

    Dangling null pointer access. Nimm den Referenzcast oder überprüfe das Ergebnis von dynamic_cast<> auf den Wert 0.



  • audacia, danke 🙂

    Linnea, wo hast du die Info in Google gefunden?



  • @DG2003
    gesucht hatte ich nach "RadioGroup1->SetFocus()" und dabei kam ich hierhin, das ist zwar für Pascal/Delphi aber das läßt sich ja umbauen

    @audacia
    hast ja recht 😉



  • Linnea, danke

    DG2003


Anmelden zum Antworten