Autor Beitrag
Grafix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 10.05.09 17:05 
Hallo mal wieder,

wie kann ich eine ScrollBox zur Laufzeit wieder leeren und dann wieder neu Befüllen?^^
Ich erzeuge auf dieser ScrollBox Panels:
ausblenden Delphi-Quelltext
1:
2:
  Panel := TPanel.Create(self);
  Panel.Parent := SBInhalt;

und nun möchte ich, dass diese (über einen Button) alle wieder gelöscht werden (oder zumindest nicht mehr angezeigt werden) und statt dessen neue wieder an den Anfang geschrieben werden.
ScrollBox.Free; löscht zwar alles, aber ich kann (wieso auch immer) danach nichts neues mehr hinzufügen.
lG
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 10.05.09 17:11 
Mit ScrollBox.Free löschst du die ScrollBox, wie willst du die danach dann auch noch benutzen... :roll:

Entweder speicherst du die Panels in einem Array oder einer Liste oder du gehst ScrollBox.Components durch und löschst alles was ein Panel ist.
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 10.05.09 20:09 
wie kann ich die Components denn löschen?
habs versucht mit
SBInhalt.Components[i] := '';
aber anscheinend kann man das nur lesen...
(Delphi anfänger und so^^)

--> habs rausgefunden =)


Zuletzt bearbeitet von Grafix am So 10.05.09 20:28, insgesamt 1-mal bearbeitet
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 10.05.09 20:22 
user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
  Panel := TPanel.Create(self);
  Panel.Parent := SBInhalt;

So erstellst du den Inhalt - du setzt also den Parent. Den kannst du benutzen, um die Scrollbox wieder zu leeren.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var i: Integer;
begin
  // Die Controls, deren Parent die SBInhalt ist, abklappern
  for i := 0 to SBInhalt.ControlCount-1 do
  begin
    // Das Control von der SBInhalt abtrennen, da es sonst zu Zugriffsverletzungen kommen kann
    SBInhalt.RemoveControl(SBInhalt.Controls[0]);

    // Das Control freigeben, und mit ihm auch alle andreen Controls, die darin sind
    SBInhalt.Controls[0].Free;
end;

Alternativ dazu könntest du auch die ScrollBox freigeben (wie du oben schon erwähnt hast), und sie anschließend wider erzeugen. Dann wäre sie garantiert leer ;)


Zuletzt bearbeitet von Yogu am So 10.05.09 20:42, insgesamt 1-mal bearbeitet
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 10.05.09 20:38 
also deine Lösung scheint deutlich besser als meine =)

aber ich bekomm bei beiden Varianten folgenden Fehler:
"Listenindex überschreitet das Maximum (2)"
Was läuft da schief?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 10.05.09 20:44 
Hoppla, blöder Fehler.

ausblenden Quelltext
1:
2:
3:
0: Erstes Control
1: Zweites Control
2: Drittes Control

So sieht die Liste am Anfang aus. Jetzt löschen wir den ersten:

ausblenden Quelltext
1:
2:
0: Zweites Control
1: Drittes Control

Natürlich dürfen wir jetzt nicht den zweiten, also iten Eintrag nehmen, sondern den ersten. Ich hab die betroffenen Stellen oben mal geändert und hervorgehoben.
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 10.05.09 20:48 
so, die Fehlermeldung ist weg, leider ist noch eine Zugriffsverletzung zu bekämpfen... kA wo die herkommt oO
(super Lösung die du da gefunden hast, mit dem iten Eintrag!!!)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Also mit deiner methode hat es leider nicht funktioniert (also ich habs nicht zum laufen bekommen). Hab die Box jetzt gelöscht und neu erstellt. Danke für eure Hilfe