Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   listbox mit stringgrid vergleichen (https://www.delphipraxis.net/152878-listbox-mit-stringgrid-vergleichen.html)

pwcca 11. Jul 2010 00:03

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)

idefix2 11. Jul 2010 08:13

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.

Teekeks 11. Jul 2010 08:15

AW: listbox mit stringgrid vergleichen
 
Wozu das repeat mitten im for? Ich glaube das sollte dort nicht sein...

idefix2 11. Jul 2010 08:48

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.

pwcca 12. Jul 2010 01:30

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:
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;
habe es mit
Code:
if ListBox1.Items.IndexOf(StringGrid1.Cells[7,row2]) = 1 then
probiert
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

Sir Rufo 12. Jul 2010 08:15

AW: listbox mit stringgrid vergleichen
 
Schau doch mal hier Delphi-Referenz durchsuchenTStringList.IndexOf da steht des Rätsels Lösung

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:
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;
Was mir vor allem nicht einleuchtet, warum du im StringGrid2 NACH der Aktion alle Spalten-Inhalte wieder löschen willst?
Ich hoffe auch, dass du VOR diesem Code dafür sorgst, dass in StringGrid2 genug Zeilen vorhanden sind.

idefix2 12. Jul 2010 08:31

AW: listbox mit stringgrid vergleichen
 
Delphi-Quellcode:
for b := 0 to ListBox1.Items.Count - 1 do
row2:=0;
 begin
   REPEAT
Das wird aber wohl nicht gemeint sein. Die For Schleife führt nur x male
Delphi-Quellcode:
row2 := 0;
aus.
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:
   for cols := 0 to StringGrid2.ColCount - 1 do
   StringGrid2.Cols[cols].Clear;
Und wenn ich das richtig sehe, wird am Ende jeden Schleifendurchgangs der Repeat Schleife das Stringgrid2 komplett gelöscht.


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