Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление страниц PageControl


Автор: Marriage 20.12.2004, 11:47
Код

 for i:=0 to PageControl.PageCount -1 do
   begin
    if PageControl.Pages[i].Tag = odsTemp.FieldByName('fk_id').AsInteger then
    begin
      ShowMessage(PageControl.Pages[i].Caption);
      ShowMessage(IntToStr(i));
      try
      PageControl.Pages[i].Free; <- выскакивает List Out of Bounds , почему ???????
      except
       ShowMessage('!!!');
      end;
       PageControl.Refresh;
    end;
   end;


Нимогу понять ошибку..
ЗАкладки динамически созданные ...

Автор: z-END 20.12.2004, 12:08
Допустим при выполнении этого кода имелось 3 закладки, тоесть цикл должен выполниться 3 раза и удалиться хотябы одна, то при условии что удаляемая закаладка не последняя (к примеру вторая) то произойдет следующее:
После ее удаления цикл примет следующее значение т.е. 3 а вкладок останется 2, т.е. здесь и вылитит ошибка т.к. PageControl1.Pages[3] уже не существует т.к. ее индекс стал равен 2!
поэтому лучше делать так:
Код

i := 0;
while i < PageControl.PageCount - 1 do
    if PageControl.Pages[i].Tag = odsTemp.FieldByName('fk_id').AsInteger
            then PageControl.Pages[i].Free
            else Inc (i);

PageControl.Refresh;

Автор: Marriage 20.12.2004, 12:35
nJIaKca.spb
Пасиб ....
smile

Автор: Satana 20.12.2004, 13:26
или что тоже самое почти
for i:=PageControl.PageCount -1 downto 0 do
по идее тоже должно работать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)