ListBox Items hinzufügen, aber oben
spacer
Autor Nachricht
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Do 06.07.06 09:33 
schau mal nach

Items.Insert

C.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: 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

ausblenden Delphi-Quelltext markieren
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 ;)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Do 06.07.06 10:16 
ausblenden Delphi-Quelltext markieren
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...
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Do 06.07.06 10:44 
antwort siehe oben:

ausblenden Delphi-Quelltext markieren
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...
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Do 06.07.06 11:09 
nein... bei mir wird der neue eintrag IMMER OBEN angefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: 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 ?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
krampi
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
XUDO
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45

Win-98SE, Win-XP/1
Delphi-7P, Turbo-Pascal-6
BeitragVerfasst: Di 06.01.09 20:26 
user profile iconmexx hat folgendes geschrieben icon mini page:
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 06.01.09 21:00 
user profile iconXUDO hat folgendes geschrieben icon mini page:
user profile iconmexx hat folgendes geschrieben icon mini page:
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.
...


Das hat er nach 2 1/2 Jahren bestimmt auch schon rausgefunden ;)

_________________
PROGRAMMER: A device for converting coffee into software.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Dude566
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1485
Erhaltene Danke: 72

W7, Vista, XP, Ubuntu
Delphi XE2 Pro, Turbo Delphi, Java/Eclipse, Notepad++
BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 2544
Erhaltene Danke: 137

Windows 7 Home Premium
Visual C# 2010 Express
BeitragVerfasst: Mi 07.01.09 16:06 
user profile iconkrampi hat folgendes geschrieben icon mini page:
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 08.01.09 00:00 
user profile iconYogu hat folgendes geschrieben icon mini page:
user profile iconkrampi hat folgendes geschrieben icon mini page:
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

_________________
PROGRAMMER: A device for converting coffee into software.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 2544
Erhaltene Danke: 137

Windows 7 Home Premium
Visual C# 2010 Express
BeitragVerfasst: Do 08.01.09 00:31 
user profile iconXentar hat folgendes geschrieben icon mini page:
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:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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 user profile iconNarses: überflüssige Umbrüche entfernt

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home