Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.536 Beiträge
 
Delphi 12 Athens
 
#6

AW: Performanceprobleme beim Befüllen von TComboBoxen

  Alt 24. Jul 2025, 17:16
Wirklich SO viel dort anzeigen?

Erstmal BeginUpdate
Delphi-Quellcode:
varList.Items.BeginUpdate;
try
  varList.Items.Clear;
  for i := 1 to 500 do
    varList.Add('<Var ' + IntToStr(i) + '>');
finally
  varList.Items.EndUpdate;
end;
Oder "in einem Schwups" zuweisen.
Delphi-Quellcode:
for i := 1 to 500 do
  stringList.Add('<Var ' + IntToStr(i) + '>');

{ besser nicht, wenn es sehr viel ist ... die ComboBox wäre schnell, aber es wird unschön erst ein langer String gebaut, der dann wieder zerlegt und dann in die Items übergeben }
//varList.Items.Text := stringList.Text; // PS: die nutzen da drin auch BeginUpdate ;)

// oder
varList.Items.Clear;
varList.Items.AddStrings(stringList); // PS: die nutzen da drin auch BeginUpdate ;)
Delphi-Quellcode:
SetLength(arrList, 500);
for i := 1 to 500 do
  arrList[i - 1] := '<Var ' + IntToStr(i) + '>';
varList.Items.Clear;
varList.Items.AddStrings(arrList); // PS: die nutzen da drin auch BeginUpdate ;)



PS: Eine TComboBoxEx kann auch nachträglich befüllt werden.

Bei der TComboBox wird zu Beginn des OnDropDown eine Kopie im DropDown-Fenster geladen/angezeigt,
aber bei TComboBoxEx lässt sich während und auch nach dem Öffnen diese Liste noch bearbeiten.

Dort wäre es z.B. möglich erstmal nur einen Teil zu laden
und wenn der Fokus auf dem letzten Item steht, den Rest, bzw. den nächsten Teil zu laden.



Ich hab mal eine ComboBox gebaut, welche Ports auflistet. (hier war nicht die ComboBox selbst das Langsame, sondern die Datenquelle)
Die wird erst gefüllt/gesucht, wenn der DropDown auf geht. (also wenn nicht nötig, wird auch nicht gesucht)
Und wenn es bei der Suche hängt, dann ist schonmal der bereits gesuchte Teil angezeigt, weiteres taucht nach und nach auf. (die Suche läuft in Threads und beendet sich beim OnCloseUp)


Von DevExpress und Anderen gibt es ComboBoxen, welche einen Filter bieten,
also egal wie viele Zeilen/Datensätze es sind, da wird NIEMALS alles angezeigt. (kann also auch nicht langsam werden)
* z.B. nur die ersten 50
* und via Filter die Auswahl einschränken (davon auch nur die ersten 50)
* auch wenn nicht immer alles da ist, kommt man dennoch an jeden Eintrag dran
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Jul 2025 um 17:27 Uhr)
  Mit Zitat antworten Zitat