2 Stimmen

Listenindex außerhalb der Grenzen (0)

Ich postete eine Frage zur Behebung eines Fehlers in einer Methodendeklaration in einem Formular in Delphi, aber nachdem ich es behoben hatte, tauchte ein weiterer Fehler beim Kompilieren auf und sagte, dass das Projekt project1.exe die Ausnahmeklasse EStringListError mit der Meldung 'list index out of bounds(0)' aufgeworfen hat, wenn ich die Taste continue drücke, die nicht funktioniert, aber wenn ich die Taste break drücke, blinkt sie auf dem Code neraz:=true; mein nachstehender Code

Procedure Reload;
var
    i:integer;
begin
form1.ListBox1.Clear;
form1.ListBox2.Clear;
if neraz then
HD;
neraz:=true;//..................here
form1.Label3.Caption:='free: '+inttostr(vs*32)+' byte'+#10#13+'cluster size = 32 bytes';
  i:=TABLE[nk1].nach;
   KolP1:=0; KolP2:=0;
   while (FAT[i]<>1024)  do begin
      if TABLE[fat[i]].tip then begin
          form1.ListBox1.Items.Add('dir>'+TABLE[fat[i]].name);
          inc(kolP1);
      end
      else
          if TABLE[fat[i]].format='txt' then
                form1.ListBox1.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format)
          else
                form1.ListBox1.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format);
      if (fat[i]<>0) then
      i:=fat[i];
   end;
   i:=TABLE[nk2].nach;
   while (FAT[i]<>1024)  do begin
      if TABLE[FAT[i]].tip then begin
          form1.ListBox2.Items.Add('dir>'+TABLE[fat[i]].name);
          inc(kolP2)
      end
      else
          if TABLE[fat[i]].format='txt' then
                form1.ListBox2.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format)
          else
                form1.ListBox2.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format);
      if (fat[i]<>0) then
      i:=fat[i];
   end;
   vfail;
end;

procedure HD;
var
  i: integer;
begin
  for i := 0 to 49 do begin
    with form2.ListView1.Items[i] do begin
      SubItems[0] := TABLE[i].name;
      SubItems[1] := TABLE[i].format;
      if TABLE[i].tip then
        SubItems[2] := 'folder'
      else
        SubItems[2] := 'file';
      SubItems[3] := IntToStr(TABLE[i].nach);
      SubItems[4] := IntToStr(TABLE[i].razmer);
    end;
    form2.ListView2.Items[i].SubItems[0] := IntToStr(fat[i]);
  end;
end;

5voto

David Heffernan Punkte 585606

Die Ausnahmeklasse EStringListError löst den Fehler List index out of bounds (0) aus, wenn Sie versuchen, auf ein Mitglied einer TStrings Instanz, die leer ist. Der wahrscheinlichste Kandidat dafür ist die SubItems Eigenschaft der Listenelemente.

Sie scheinen in eine ganz gewöhnliche Falle getappt zu sein. Obwohl Sie Spalten für die Listenansicht erstellt haben, müssen Sie auch die SubItems Liste für jeden Listenpunkt. Eine einfache Lösung ist die Änderung HD wie diese:

with form2.ListView1.Items[i] do begin
  while SubItems.Count<5 do
    SubItems.Add('');
  SubItems[0] := ...

Obwohl es in der Tat besser sein könnte, die Unterpunkte zur gleichen Zeit hinzuzufügen, in der Sie die Listenelemente erstellen. Ich zeige aber keinen Code dafür, da Sie den Teil Ihres Programms, der die Listen auffüllt, nicht angegeben haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X