Autor |
Beitrag |
mexx
      
Beiträge: 1183
|
Verfasst: Do 06.07.06 09:24
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?
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Do 06.07.06 09:33
schau mal nach
Items.Insert
C.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: 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!
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: 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 
      
Beiträge: 1183
|
Verfasst: 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!
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: 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!
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: 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 
      
Beiträge: 1183
|
Verfasst: 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.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: 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 
      
Beiträge: 1183
|
Verfasst: 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!
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Do 06.07.06 11:09
nein... bei mir wird der neue eintrag IMMER OBEN angefügt
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: 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
Hält's aus hier
Beiträge: 11
|
Verfasst: 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
      
Beiträge: 45
Win-98SE, Win-XP/1
Delphi-7P, Turbo-Pascal-6
|
Verfasst: 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
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 06.01.09 21:00
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: 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.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 08.01.09 00:00
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 08.01.09 00:31
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
|