Zitat von
Muetze1:
Ohne die Frage zu beantworten würde ich gerne eine Gegenfrage stellen, weil es vllt. eine performantere Lösung gibt:
Danke für Deine Antwort.
Das mit den Labels war beispielhaft gemeint. Mein Programm macht etwas anderes: Ich habe eine Liste von Objekten deren Id eine
Guid ist. Initial erzeuge ich aus der Liste mehrere Buttons innerhalb einer Groupbox, in den Namen des Buttons arbeite ich die
Guid ein und der Button zeigt einen Namen (Str) des Objektes an. Wenn ein Button gedrückt wird, soll eine bestimmte Aktion ausgelöst werden, zu der es aber notwendig ist, das inhaltlich zum Button gehörende Objekte zu wissen (löse ich über den Buttonnamen anhand der
Guid).
Hier mal der Code zu Erzeugen der Buttons:
Delphi-Quellcode:
procedure TMainForm.Create_Selection_Buttons;
var
_Button: TButton;
i, ypos, xpos: integer;
_Activity:TActivity;
begin
ypos := 15;
xpos := 10;
for i := 0 to self.fObjManager.ActivityList.Count-1 do begin
_Activity:=TActivity(self.fObjManager.ActivityList.Objects[i]);
// neuer button
_Button:=TButton.Create(Self);
with _Button do begin
Parent:=MainForm.gbActivitySelection;
Caption:=_Activity.Name;
Left:=xpos;
Top:=ypos;
Width:= MainForm.gbActivitySelection.Width - xpos - xpos;
Name:=_Activity.GUID_ComponentName;
OnClick:=Selection_Buttons_Click;
end;
ypos := ypos + _Button.Height + 5;
end;
end;
und hier die Click-Behandlung:
Delphi-Quellcode:
procedure TMainForm.Selection_Buttons_Click(Sender: TObject);
var
guid,
name:
string;
_Activity: TActivity;
pos: integer;
begin
if Sender
is TButton
then begin
name:=TButton(Sender).Caption;
guid:=Get_GuidStr_From_ComponentName(TButton(Sender).
Name);
pos:=self.fObjManager.ActivityList.IndexOf(
guid);
_Activity:=TActivity(self.fObjManager.ActivityList.Objects[pos]);
self.fObjManager.CurrentActivity := _Activity;
end;
end;
Mein Problem besteht nun darin, das die Objektliste sich zur Laufzeit verändern kann, d.h. neue Objekte hinzukommen oder gelöscht werden. Wie kann ich dann die Buttons entsprechend neu aufbauen.
Gruß,
Christoph