![]() |
Delphi-Version: 2005
listbox mit stringgrid vergleichen
hallo liebe community ich hab mal wider n schleifen problem :oops:
ich habe in meiner listbox ein par items geladen, und diese moechte ich jetzt mit meinem stringgrid vergleichen nur wenn ich das jetzt so schreib sagt der mir: Listenindex ueberschreitet maximum
Delphi-Quellcode:
for b := 0 to ListBox1.Items.Count - 1 do
begin REPEAT if StringGrid1.Cells[7,row2]=ListBox1.Items[b] then //dann kopiert er mir die zeile, hat aber genau mit dieser if formel ein problem repeat schleife hab ich geschlossen, und die kopierbefehlen rausgenommen (zur uebersichtlichkeit) |
AW: listbox mit stringgrid vergleichen
Und Du bist sicher, dass nicht StringGrid1.Cells[7,row2] der Übeltäter ist? Weil der Zugriff auf die Listbox kann eigentlich nicht falsch sein.
|
AW: listbox mit stringgrid vergleichen
Wozu das repeat mitten im for? Ich glaube das sollte dort nicht sein...
|
AW: listbox mit stringgrid vergleichen
Übrigens gibt es
Listbox.Items.Indexof (string) Das spart Dir das manuelle Iterieren durch die Einträge mittels for-Schleife. |
AW: listbox mit stringgrid vergleichen
ich glaub ihr habt mich falsch verstanden
ich moechte durch eine liste gehen die ich in einer listbox geladen habe ist die zelle identisch mit dem listbox eintrag soll mir mein programm diese zeile in ein anderes stringgrid kopieren und dann das stringgrid weiter absuchen ob er noch eine zelle findet mit demselben wort usw, bis er am stringgridende ankommt, dann einen eintrag bei der listbox weiter und das ganze wider von vorn wenn ich dass jetzt mit ListBox1.Items.IndexOf mache kopiert er mir zeile fuer zeile aber nicht die identischen
Code:
habe es mit
if ListBox1.Items.IndexOf(StringGrid1.Cells[7,row2]) = - 1 then
begin for row2 := 6 to StringGrid1.RowCount - 1 do begin StringGrid2.Cells[0,row3]:=copy(stringGrid1.Cells[0,row2], 0,300); StringGrid2.Cells[1,row3]:=copy(stringGrid1.Cells[1,row2], 0,300); StringGrid2.Cells[3,row3]:=copy(stringGrid1.Cells[3,row2], 0,300); StringGrid2.Cells[6,row3]:=copy(stringGrid1.Cells[6,row2], 0,300); StringGrid2.Cells[7,row3]:=copy(stringGrid1.Cells[7,row2], 0,300); StringGrid2.Cells[9,row3]:=copy(stringGrid1.Cells[9,row2], 0,300); row3:=row3+1; end; row3:=1; for cols := 0 to StringGrid2.ColCount - 1 do StringGrid2.Cols[cols].Clear; end;
Code:
probiert
if ListBox1.Items.IndexOf(StringGrid1.Cells[7,row2]) = 1 then
dann macht er gar nichts hier nochmal der alte code mit dem fehler
Code:
for b := 0 to ListBox1.Items.Count - 1 do
row2:=0; begin REPEAT StringGrid2.Cells[0,0]:='Datum'; StringGrid2.Cells[1,0]:='Zeit'; StringGrid2.Cells[2,0]:='Säule'; StringGrid2.Cells[3,0]:='Registrierungsnummer'; StringGrid2.Cells[6,0]:='Km-stand'; StringGrid2.Cells[7,0]:='Anwender'; StringGrid2.Cells[9,0]:='Menge'; if StringGrid1.Cells[7,row2]=ListBox1.Items[b] then //in dieser zeile gibt er den fehler aus begin StringGrid2.Cells[0,row3]:=copy(stringGrid1.Cells[0,row2], 0,300); StringGrid2.Cells[1,row3]:=copy(stringGrid1.Cells[1,row2], 0,300); StringGrid2.Cells[3,row3]:=copy(stringGrid1.Cells[3,row2], 0,300); StringGrid2.Cells[6,row3]:=copy(stringGrid1.Cells[6,row2], 0,300); StringGrid2.Cells[7,row3]:=copy(stringGrid1.Cells[7,row2], 0,300); StringGrid2.Cells[9,row3]:=copy(stringGrid1.Cells[9,row2], 0,300); row3:=row3+1; end; row2:=row2+1; row3:=1; for cols := 0 to StringGrid2.ColCount - 1 do StringGrid2.Cols[cols].Clear; UNTIL (row2=StringGrid1.RowCount-1); end; hoffe ihr koennt mir helfen |
AW: listbox mit stringgrid vergleichen
Schau doch mal hier
![]() Irgendwie ist dein Code aber relativ wirr und ich kann mir nicht vorstellen, das dieser Code ansatzweise das tut was du möchtest:
Delphi-Quellcode:
Was mir vor allem nicht einleuchtet, warum du im StringGrid2 NACH der Aktion alle Spalten-Inhalte wieder löschen willst?
row3 := 1;
for row2 := 6 to StringGrid1.RowCount - 1 do if ListBox1.Items.IndexOf(StringGrid1.Cells[7,row2]) = - 1 then begin StringGrid2.Cells[ 0, row3 ] := copy( stringGrid1.Cells[ 0, row2 ], 0, 300 ); StringGrid2.Cells[ 1, row3 ] := copy( stringGrid1.Cells[ 1, row2 ], 0, 300 ); StringGrid2.Cells[ 3, row3 ] := copy( stringGrid1.Cells[ 3, row2 ], 0, 300 ); StringGrid2.Cells[ 6, row3 ] := copy( stringGrid1.Cells[ 6, row2 ], 0, 300 ); StringGrid2.Cells[ 7, row3 ] := copy( stringGrid1.Cells[ 7, row2 ], 0, 300 ); StringGrid2.Cells[ 9, row3 ] := copy( stringGrid1.Cells[ 9, row2 ], 0, 300 ); row3 := row3 + 1; end; Ich hoffe auch, dass du VOR diesem Code dafür sorgst, dass in StringGrid2 genug Zeilen vorhanden sind. |
AW: listbox mit stringgrid vergleichen
Delphi-Quellcode:
Das wird aber wohl nicht gemeint sein. Die For Schleife führt nur x male
for b := 0 to ListBox1.Items.Count - 1 do
row2:=0; begin REPEAT
Delphi-Quellcode:
aus.
row2 := 0;
Kannst Du nochmal den Code so posten, wie Du es Dir wirklich vorstellst? Wahrscheinlich (aber eben nicht sicher) ist nur die Zeile mit dem begin vertauscht. Und in der Repeat Schleife immer wieder die Überschriften neu zu setzen ist auch nicht sonderlich zielführend.
Delphi-Quellcode:
Und wenn ich das richtig sehe, wird am Ende jeden Schleifendurchgangs der Repeat Schleife das Stringgrid2 komplett gelöscht.
for cols := 0 to StringGrid2.ColCount - 1 do
StringGrid2.Cols[cols].Clear; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz