Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - [VisualCLX] ListBox Items hinzufügen, aber oben
mexx - Do 06.07.06 09:24
Titel: ListBox Items hinzufügen, aber oben
Hallo,
mit ListBox.Items.Append(String) füge ich einer ListBox einen Eintrag hinzu. Ich möchte aber nicht, dass die Eintäge unten hinzugefügt werden, sondern immer oben. Wie kann ich das machen, ohne den Index nach dem Append zu ändern?
crowley - Do 06.07.06 09:33
schau mal nach
Items.Insert
C.
mexx - Do 06.07.06 09:48
Dann muss ich ja den Index des bestehenden Eintrages ändern. Das ist ungünstig und bei vielen Einträgen sicherlich Ressourcenaufwendig!
crowley - Do 06.07.06 10:09
hmm ? moment... du willst einen eintrag irgendwo in deiner Liste einfügen, aber dafür darf sich der Index nicht verschieben ? das haut nicht wirklich hin ;) denn wenn du was einfügst, verschiebt sich der Index aller nachfolgenden Einträge o_O
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Button1Click(Sender: TObject); var i, dummy : Integer;
begin Randomize; lbx.Items.BeginUpdate; try lbx.Clear;
for i := 0 to 1000 do lbx.Items.Add(IntToStr(i));
for i := 0 to 200 do begin dummy := Random(1000); lbx.Items.Insert( lbx.Items.IndexOf(IntToStr(dummy - 1)) + 1, IntToStr(dummy) );
if i mod 50 = 0 then Application.ProcessMessages end;
finally lbx.Items.EndUpdate; end; end; |
daher mal so als Tip...
BeginUpdate und EndUpdate verwenden... und wenn du den neuen Wert NACH einem bestimmten Eintrag setzen willst, dann mach es so wie ich oben mit IndexOf(..)+1... wenn es VOR dem bestehenden Eintrag sein soll, dann lass das +1 weg ;)
mexx - Do 06.07.06 10:10
Dann muss ich ja den Index des bestehenden Eintrages ändern. Das ist ungünstig und bei vielen Einträgen sicherlich Ressourcenaufwendig!
mexx - Do 06.07.06 10:12
Ich glaube Du hast mich verstenden. Ich will meinen Eintrag einfach nur oben haben nicht unten in der Liste, sondern immer oben drauf!
crowley - Do 06.07.06 10:16
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| lbx.Items.BeginUpdate; try lbx.Clear;
for i := 0 to 200 do begin dummy := Random(1000); lbx.Items.Insert(0, IntToStr(dummy)); end; finally lbx.Items.EndUpdate; end; |
obiger code fügt dir 200 zufällige Zahlen immer an den Anfang deiner Liste an...
mexx - Do 06.07.06 10:22
Ok, nochmal.
Ich habe folgende Inhalte. a,b,c,d,e,...
Ungewiss wieviele, also ist eine for-schleife schon mal unmöglich!
Wenn ich nun ListBox.Items.Append(String) mache, habe ich eine Liste, die jeden Eintrag nacheinander von oben nach unten auflistet.
a
b
c
d
e
...
Ich möchte aber
...
e
d
c
b
a
Keine Vorschleife mit kein zufälligen Index, weil die Daten ja nicht irgendwo stehen sollen und auch keine alphabetische Sortierung, weil a,b,c,d,e,... nur ein Beispiel waren und die Daten keine Sortierung erlauben.
crowley - Do 06.07.06 10:44
antwort siehe oben:
Delphi-Quelltext
1:
| lbx.Items.Insert(0, neues_item); |
Ich hatte das in eine Schleife gepackt hatte, um dir zu demonstrieren, wie man es mit VIELEN Items macht... und wenn du es mit mehreren Items machst, bietet sich nun mal eine Schleife an... dabei solltest du dann auch BeginUpdate..try..finally..EndUpdate..End benutzen...
denke, ein bißchen Transferleistung sollte ich ja erwarten können... etwas denken hilft manchmal weiter...
mexx - Do 06.07.06 10:52
Bei Deiner Methode steht doch dann jeder Eintrag an irgendeiner Stelle! So ist das nicht gewollt. Wenn ich die Schaltfläche drücke, soll einfach nur der nächste Eintrag oben hinzugefügt werden!
crowley - Do 06.07.06 11:09
nein... bei mir wird der neue eintrag IMMER OBEN angefügt
crowley - Do 06.07.06 11:24
lbx.Items.Insert(0, neues_item);
die 0 ist die Position, an der das neue Item eingefügt werden soll... 0 ist das oberste Item in der Listbox...
wenn bei dir das so nicht funktionieren sollte... hast du vielleicht Sorted oder etwas anderes, dass die Reihenfolge der Items in der Listbox verändert, aktiviert ?
krampi - Di 15.01.08 00:12
Wenn ich zum Thema eine weitere Frage einwerfen darf - (um nicht einen neuen Thread zu öffnen) - wie kann ich ein Item in einer Listbox hinzufügen, wenn diese auf eine Textdatei zurückgreift?
XUDO - Di 06.01.09 20:26
mexx hat folgendes geschrieben : |
Wenn ich die Schaltfläche drücke, soll einfach nur der nächste Eintrag oben hinzugefügt werden! |
Hallo mexx,
der erste Eintrag in einer Listbox hat immer den Index 0 und der letzte den Index Listbox1.items.Count. Das ist die Anzahl der Einträge -1, da die Liste bei 0 beginnt. Ein neuer Eintrag oben muss also zwangsläufig den Index 0 bekommen.
Du kommst also nicht drumherum anzuweisen: Listbox1.items[0]:=[neuer Eintrag];
Willst du nicht, daß der ursprüngliche Eintrag 0 = items[0] dadurch überschrieben wird und damit "weg" ist, bleibt Dir eine vorher (als vor dem neuen 0-Eintrag) "veranstaltete" Schiebescheife mit dem Endwert .Count nicht erspart, die allen items vom neuen letzten an den Inhalt des "darüberstehenden" items zuweist und damit den alten Nulleintrag in items[1] kopiert, womit dann [0] überschrieben werden darf, ohne Einträge zu verlieren.
Falls irgendwo im Programm ein Array/eine Ordnung existiert, die auf die einzelnen Items bzw. deren Index hinweist, muß hier natürlich ebenfalls "geschoben" werden.
Gruß Udo
Dude566 - Mi 07.01.09 15:30
Mit 0 im obigen Code ist die Stelle in der Listbox angegeben, und nach dem Komma kommt dann die Variable. Also wird es einfach immer vorne angefügt und die hinteren weiter nach hinten verschoben so dass vorne Platz ist.
Yogu - Mi 07.01.09 16:06
krampi hat folgendes geschrieben : |
Wenn ich zum Thema eine weitere Frage einwerfen darf - (um nicht einen neuen Thread zu öffnen) - wie kann ich ein Item in einer Listbox hinzufügen, wenn diese auf eine Textdatei zurückgreift? |
Einmal angenommen, du meinst mit "auf eine Textdatei zurückgreifen" "eine Textdatei geladen haben", macht das keinen Unterschied. Du kannats genauso die Prozeduren
ListBox1.Items.Add und
ListBox1.Items.Insert verwenden.
Xentar - Do 08.01.09 00:00
Yogu hat folgendes geschrieben : |
krampi hat folgendes geschrieben : | Wenn ich zum Thema eine weitere Frage einwerfen darf - (um nicht einen neuen Thread zu öffnen) - wie kann ich ein Item in einer Listbox hinzufügen, wenn diese auf eine Textdatei zurückgreift? |
Einmal angenommen, du meinst mit "auf eine Textdatei zurückgreifen" "eine Textdatei geladen haben", macht das keinen Unterschied. Du kannats genauso die Prozeduren ListBox1.Items.Add und ListBox1.Items.Insert verwenden. |
Selbst diese Frage ist schon ein Jahr her..
Man, kann das hier nicht mal jemand zumachen? :P
Yogu - Do 08.01.09 00:31
Xentar hat folgendes geschrieben : |
Selbst diese Frage ist schon ein Jahr her..
Man, kann das hier nicht mal jemand zumachen? :P |
Ahrg, ich seh eine neue Antwort, ein Post von 2008 - klar, wahrscheinlich vom Dezember :autsch:
Blackheart666 - Do 08.01.09 01:02
Wir sind doch hier in einem Forum wo der Sinn darin besteht Fragen zu beantworten, egal wie alt sie sind. Dadurch brauchen andere User die eventuell die selbe Frage haben und die Suche bemühen eine entsprechende Antwort finden (Wenn mann nicht um löschung des Themas bittet, warum auch immer)
"Kopfschüttelsmilie nicht gefunden"
Moderiert von
Narses: überflüssige Umbrüche entfernt
Pepp3r - Di 22.03.11 12:33
queue aus pointern programmieren und im memo abbilden.
so hab ich das immer gemacht.
jaenicke - Di 22.03.11 12:36
Die Frage ist jetzt fast 5 Jahre alt...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!