Hallo,
obwohl ich schon sehr viel mit Delphi und
VCL programmiert habe, bin ich heute auf ein Problemchen gestoßen, das sich letztlich schon anhand von nur zwei effektiven Programmzeilen demonstrieren läßt, welche mit aber Rätsel aufgeben, die ich Euch nicht vorenthalten will:
Eine
VCL-Anwendung (Delphi 7) mit zwei Formularen; Form1 enthält lediglich einen Button, dessen OnClick-Ereignisfunktion das zweite Formular anzeigt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show();
end;
Form2 enthält lediglich eine RadioGroup mit den drei Items "A", "B", und "C", deren ItemIndex in der OnShow-Ereignisfunktion auf 0 gesetzt wird:
Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
begin
RadioGroup1.ItemIndex := 0;
end;
So, das war's schon. Ich starte nun dieses Progrämmchen, betätige den Button, worauf sich Form2 öffnet. Hier wähle ich in der RadioGroup Item "C" aus und schließe Form2 (durch Click auf das Schließen-Symbol oben rechts) wieder. Wenn ich jetzt den Button erneut betätige, öffnet sich Form 2 wieder und nun kommt das (für mich) Unglaubliche: in der RadioGroupo ist Item "C" selektiert, d.h. der ItemIndex ist 2, obwohl ich ihn in FormShow() explizit auf 0 setze und dieser Code auch tatsächlich durchlaufen wird.
Das Problem tritt im C++-Builder 5 genauso auf.
Anscheinend wird irgendwo in den Tiefen der
VCL nach dem Aufruf von FormShow() der RadioGroup1.ItemIndex wieder auf den Wert restauriert, der beim Schließen des Formulars galt. Aber warum, was soll dieses unverständliche "Eigenleben"? Und weiß jemand einen eleganten Weg, den ItemIndex beim erneuten Anzeigen des Formulars dennoch auf einen Startwert zurücksetzen?