2009-03-03 9 views
2

Wenn ich 10 000 Elemente in einer Combobox anzeigen möchte (nur ein Beispiel), ist das Laden einer Liste von der Festplatte schnell, aber wenn ich die DataSource einstelle, ist es langsam. Gibt es eine Möglichkeit, nur auf die Daten zu zeigen und sie nicht in die Combobox-Sammlung zu konvertieren.Warum alle verschiedenen Sammlungen in Winforms?

List<string> myitems = getItems(); 

ComboBox box = new ComboBox(); 
box.DataSource = myitems;  // <--- Takes a long time 

von Delphi kommend, wo alles ein String ich all die verschiedenen Sammlungen ein bisschen komisch finden, warum sie nicht nur List<T> verwenden oder eine andere Klasse nicht so eng mit der Steuerung gekoppelt?

In Delphi:

textbox.lines = myitems 
listbox.items = myitems 
combobox.items = myitems 

alle setzt nur einen Zeiger auf die gleichen Daten, dh Augenblick.

Antwort

1

Das zugrunde liegende Windows-Kombinationssteuerelement (wie einige andere) kann im "virtuellen" Modus arbeiten, in dem es bei Bedarf ausgefüllt wird, ohne dass eine große Anzahl von Elementen vorab geladen werden muss. Dies spart Speicherplatz und Zeit und ermöglicht extrem lange Inhaltslisten.

Leider scheinen die nativen WinForm-Steuerelemente diesen Betriebsmodus nicht zu unterstützen, aber möglicherweise ist ein anderer Wrapper verfügbar?

Verwandte Themen