Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > Глюк при переборе компонентов из фрейма


Автор: IGL 02.02.05, 15:00
Создал я фрайм с кнопкой, по нажатию которой должны очишаться компоненты на форме с этим фреймом
Код такой
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
      Comp: TComponent;
      Count: LongInt;
    begin
      For Count:= 0 to Pred((Owner as TForm).ControlCount) do
        begin
          Comp:= (Owner as TForm).Components [Count];
          If Comp is TEdit then (Comp as TEdit).Clear;
          If Comp is TComboBox then (Comp as TComboBox).Clear;
          if Comp is TCheckBox then (Comp as TCheckBox).Checked:= False;
          { и так далее ...}
        end;
    end;


Фрейм разместил на форме, накидал компонентов, запускаю, нажимаю кнопку "Очистить"...
Delphi выдает ошибку, мол неверный индекс компонента. Стал смотреть - оказывает, что ControlCount = 15, а
на 12 компоненте ошибка - List Index Out Of bounds. Кто-нибудь встеречался с подобной проблемой? :wall:

Автор: karabanov 02.02.05, 15:09
ComponentCount это количество Owned components. а ControlCount - количество Child Controls. а ты берешь индексы одного, а получаешь другое
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
      Comp: TComponent;
      Count: LongInt;
    begin
      For Count:= 0 to Pred((Owner as TForm).ComponentCount) do     // здесь
        begin
          Comp:= (Owner as TForm).Components [Count];
          If Comp is TEdit then (Comp as TEdit).Clear;
          If Comp is TComboBox then (Comp as TComboBox).Clear;
          if Comp is TCheckBox then (Comp as TCheckBox).Checked:= False;
          { и так далее ...}
        end;
    end;

Автор: IGL 02.02.05, 15:40
Спасибо, добрый человек!

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