2012-01-08 3 views
2

У меня был вопрос об исправлении ошибки в объявлении метода в форме в Delphi, но после исправления исправления возникла ошибка при компиляции, а его высказывающий проект project1.exe поднял класс исключений EStringListError с сообщением «индекс списка вне границ (0)»., когда я нажимаю продолжить ее не работает, но когда я нажимаю нарушить его мигание на коде neraz:=true; это мой код нижеСписок индексов за пределами (0)

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; 
+2

Ваша ошибка в 'HD'. –

+0

Что в 'HD'? –

+4

Ваш код действительно отформатирован? Если это так, вам необходимо срочно узнать, как правильно отформатировать код. Тем более, что вы смешиваете отдельные инструкции и составные блоки операторов. Это делает жизнь трудной в лучшие времена, но без дисциплины отступов ваш код недостижим. –

ответ

5

класс исключения EStringListError поднимает error List index out of bounds (0) при попытке получить доступ к элементу TStrings экземпляра, который пуст. Наиболее вероятным кандидатом для этого является свойство SubItems элементов списка.

Возможно, вы попали в довольно обычную ловушку. Хотя вы создали столбцы для представления списка, вам также необходимо заполнить список SubItems для каждого элемента списка. Простое решение заключается в изменении HD так:

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

Хотя это на самом деле может быть лучше, чтобы добавить подпункты в то же самое время, что вы создаете элементы списка. Но я не показываю код для этого, так как вы не включили часть своей программы, которая заполняет списки.

+0

Вы тот человек, который благодарит его работу –

Смежные вопросы