RadioGroup: RadioButtons zur Laufzeit einfügen

Rund um die LCL und andere Komponenten
Antworten
AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

RadioGroup: RadioButtons zur Laufzeit einfügen

Beitrag von AlterMann »

Hallo

Ich fülle eine RadioGroup zur Laufzeit mit RadioButtons und möchte diese auch zur Laufzeit wieder entfernen können.

Da ich jedem RadioButton auch eine FontFarbe und eine OnChangeroutine zuweisen möchte, verwende ich dafür folgenden Code:

Code: Alles auswählen

 
   while not SQLQuery1.EOF do
    begin
     inc(a);
     RB := TRadioButton.Create(Form45.RadioGroup1);
     RB.Caption:='['+SQLQuery1.Fields[2].AsString+'] '+SQLQuery1.Fields[0].AsString;
     RB.Parent := Form45.RadioGroup1;
     RB.Font.Color:=SQLQuery1.Fields[1].AsInteger;
     RB.OnChange:=@Form45.RadioButtonChange;
     SQLQuery1.Next;
    end;
 


Da die Items gelegentlich neu aus der DB eingelesen werden, wollte ich die RadioGroup zuvor mit

Code: Alles auswählen

 
  Form45.RadioGroup1.Items.Clear;
 

leeren, da sonst die Einträge doppelt drin stehen. Das passiert aber trotzdem, da die RadioGroup anscheinend keine Items hat, wenn ich meine Methode zum Einfügen verwende.

Auch

Code: Alles auswählen

 
 RadioGroup1.items.Delete(0);
 

führt mit "Index out of Bounds" zum Absturz.

Füge ich die Einträge mit

Code: Alles auswählen

 
     Form45.RadioGroup1.Items.Add(SQLQuery1.Fields[0].AsString);
 

hinzu kann ich die Fontfarbe und OnChangeroutine nicht festlegen.

Hat wer eine Idee, wo mein Denkfehler liegt?

Schönes Wochenende
Christian
Früher war alles besser. Und aus Holz!

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: RadioGroup: RadioButtons zur Laufzeit einfügen

Beitrag von Soner »

Versuchmal so etwas zu benutzen:

Code: Alles auswählen

 
 //Alle Löschen
 while   RadioGroup1.ControlCount>0 do
     RadioGroup1.Controls[0].Free;
 
//10. Löschen
RadioGroup1.Controls[9].Free;
 
//hinzufügen
RadioButton1.Parent:=RadioGroup1;
 


Du kannst auch direkt mit Variablennamen löschen:
RadioButtonXYZ.Free;

AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: RadioGroup: RadioButtons zur Laufzeit einfügen

Beitrag von AlterMann »

Soner hat geschrieben: //Alle Löschen
while RadioGroup1.ControlCount>0 do
RadioGroup1.Controls[0].Free;
 


Danke. Das funktioniert.

Soner hat geschrieben: 
//hinzufügen
RadioButton1.Parent:=RadioGroup1;



Das habe ich schon drin ( RB.Parent := Form45.RadioGroup1; )

Trotzdem verstehe ich nicht ganz warum es einen Unterschied macht ob ein RadioButton auf meine Art oder mittels Item.Add hinzugefügt wird.
Aber egal, es funktioniert ja jetzt. Danke.
Früher war alles besser. Und aus Holz!

Antworten