Christian Schmitt
2019-08-17 21:40:13 UTC
Hallo Leute,
nachdem ich jetzt 5h lang einen Fehler bei mir gesucht habe, habe ich festgestellt, dass die TRadioGroup ein gewisses Eigenleben hat. Man stelle sich ein Fenster mit einer RadioGroup (2 Elemente) und einem Button nebst folgendem Code vor:
procedure form1.TestbuttonClick(Sender:TObject);
begin
RadioGroup1.Button[0].Setfocus;
RadioGroup1.Itemindex:=1;
end;
Wenn man den Testbutton klickt, hat man folgenden Status: Die Radiogroup hat den Focus, genauer gesagt, das 0te Item. Ausgewählt, also mit schwarzem Punkt, ist aber das 1. Item. Sobald nun das Fenster neu gezeichnet wird, weil es z.B. inaktiv und wieder aktiv wird, springt der Radiobutton dorthin, wo der Focus war/ist, auf das 0. Element.
Natürlich kommt jetzt der Einwand, warum sollte man sowas tun?! Natürlich sollte man das nicht :-), es hat sich nur so ergeben: Ich habe eine Anwendung, in der ich zum Einen per Mausklick die Radiobuttons setzen kann, zum anderen aus einem anderen Fenster heraus mit Messages und ItemIndex die Radiobuttons gesetzt werden. Und wenn dies geschieht und ich vorher im aktiven Fenster als letztes einen Radiobutton angeklickt hatte (der also den Focus hat wenn das Fenster wegen wechsels Inaktiv wird) und dann mit einer Message vom anderen Fenster ein anderer Radiobutton ausgewählt wird und ich dann wieder das Fenster aktiviere (Repaint), dann springt mein Radiobutton dorthin, wo er nicht hingehört :-(. Ist das ein Bug oder bin ich zu blöd? Ich habe mir jetzt als Workaround beholfen, in dem ich bei jedem Setzen des ItemIndex auch ein Setfocus hinterher schiebe. Dann habe ich keine Probleme. Das kann aber doch nicht die Lösung sein, oder doch?
Kann das bitte mal jemand mit anderen Delphi-Versionen testen (ich habe XE)?
Gruß
Christian
nachdem ich jetzt 5h lang einen Fehler bei mir gesucht habe, habe ich festgestellt, dass die TRadioGroup ein gewisses Eigenleben hat. Man stelle sich ein Fenster mit einer RadioGroup (2 Elemente) und einem Button nebst folgendem Code vor:
procedure form1.TestbuttonClick(Sender:TObject);
begin
RadioGroup1.Button[0].Setfocus;
RadioGroup1.Itemindex:=1;
end;
Wenn man den Testbutton klickt, hat man folgenden Status: Die Radiogroup hat den Focus, genauer gesagt, das 0te Item. Ausgewählt, also mit schwarzem Punkt, ist aber das 1. Item. Sobald nun das Fenster neu gezeichnet wird, weil es z.B. inaktiv und wieder aktiv wird, springt der Radiobutton dorthin, wo der Focus war/ist, auf das 0. Element.
Natürlich kommt jetzt der Einwand, warum sollte man sowas tun?! Natürlich sollte man das nicht :-), es hat sich nur so ergeben: Ich habe eine Anwendung, in der ich zum Einen per Mausklick die Radiobuttons setzen kann, zum anderen aus einem anderen Fenster heraus mit Messages und ItemIndex die Radiobuttons gesetzt werden. Und wenn dies geschieht und ich vorher im aktiven Fenster als letztes einen Radiobutton angeklickt hatte (der also den Focus hat wenn das Fenster wegen wechsels Inaktiv wird) und dann mit einer Message vom anderen Fenster ein anderer Radiobutton ausgewählt wird und ich dann wieder das Fenster aktiviere (Repaint), dann springt mein Radiobutton dorthin, wo er nicht hingehört :-(. Ist das ein Bug oder bin ich zu blöd? Ich habe mir jetzt als Workaround beholfen, in dem ich bei jedem Setzen des ItemIndex auch ein Setfocus hinterher schiebe. Dann habe ich keine Probleme. Das kann aber doch nicht die Lösung sein, oder doch?
Kann das bitte mal jemand mit anderen Delphi-Versionen testen (ich habe XE)?
Gruß
Christian