Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 23:07   #1
Maks57
 
Регистрация: 23.11.2009
Сообщений: 8
По умолчанию Динамическое удаление TCheckBox

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

Код следующий:

Код:
procedure TTestForm.Button2Click(Sender: TObject);
var
 t, i: integer;
begin
 i:=1;
DM.Test_ident_proc.Parameters.ParamByName('@Title').Value:=MainForm.ComboBox1.Text;
 DM.Test_ident_proc.ExecProc;
 DM.Test_ident_proc.Open;
 DM.Question_ident_proc.Parameters.ParamByName('@Question_Num').Value:=DM.Test_ident_proc.FieldByName('Question_Num').AsInteger;
 DM.Question_ident_proc.ExecProc;
 DM.Question_ident_proc.Open;
 if a[i] = CheckBox then
  for i:=1 to DM.Question_ident_proc.RecordCount do
   a[i].Free;
 RadioGroup1.Items.Clear;
 RadioGroup1.Visible:=false;
 Edit1.Visible:=false;

 DM.Question_ident_proc.First;
 while not DM.Question_ident_proc.Eof do
  begin
   t:=DM.Test_ident_proc.FieldByName('Type_Num').AsInteger;
   case t of
    1: begin
        RadioGroup1.Visible:=true;
        RadioGroup1.Items.Add(DM.Question_ident_proc.FieldByName('Answer_text').AsString);
       end;
    2: begin
        a[i]:=TCheckBox.Create(Self);
        a[i].Parent:=TestForm;
        a[i].Left:=460;
        a[i].Caption:=DM.Question_ident_proc.FieldByName('Answer_text').AsString;
        a[i].top:=100 + i*20;
        inc(i);
       end;
    3: Edit1.Visible:=true;
  end;
  DM.Question_ident_proc.Next;
 end;

 Label1.Caption:=DM.Test_ident_proc.FieldByName('Question_Text').AsString;
 DM.Question_ident_proc.Next;
 DM.Test_ident_proc.Next;
 DM.Question_ident_proc.Close;
end;

Последний раз редактировалось Maks57; 23.11.2009 в 23:33.
Maks57 вне форума Ответить с цитированием
Старый 23.11.2009, 23:15   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Код:
var component : TComponent;
    i: integer;
begin
  for i:=0 to Form1.ControlCount-1 do
  begin
    component:=FindComponent('CheckBox'+IntToStr(i+1));
    (component as TCheckBox).Free;
  end;
end;
dr.Chas вне форума Ответить с цитированием
Старый 23.11.2009, 23:17   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
t:=DM.Test_ident_proc.FieldByName(' Type_Num').AsInteger;
RadioGroup1.Visible:=false;
a[i].Free;
Edit1.Visible:false;
case t of
1: begin
RadioGroup1.Visible:=true;
RadioGroup1.Items.Add(DM.Question_i dent_proc.FieldByName('Answer_text' ).AsString);
end;
2: begin
a[i]:=TCheckBox.Create(Self);
a[i].Parent:=TestForm;
a[i].Left:=460;
a[i].Caption:=DM.Question_ident_proc.Fi eldByName('Answer_text').AsString;
a[i].top:=100 + i*20;
inc(i);
end;
3: Edit1.Visible:=true;
end;
DM.Question_ident_proc.Next;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.11.2009, 23:37   #4
Maks57
 
Регистрация: 23.11.2009
Сообщений: 8
По умолчанию

dr.Chas
ничего не происходит( даже пробовал на отдельную кнопку это делать

evg_m
таким образом он их сразу же после создания удалять будет, там же цикл идёт while not DM.Question_ident_proc.Eof
Maks57 вне форума Ответить с цитированием
Старый 23.11.2009, 23:55   #5
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Не работает потому:

Form1.ControlCount-1 - у вас другое название формы.

FindComponent'(CheckBox'+IntToStr(i+1)); Как видите он ищет по имени компонента.
dr.Chas вне форума Ответить с цитированием
Старый 24.11.2009, 00:12   #6
Maks57
 
Регистрация: 23.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Не работает потому:

Form1.ControlCount-1 - у вас другое название формы.

FindComponent'(CheckBox'+IntToStr(i+1)); Как видите он ищет по имени компонента.
Ну уж название формы то я поменял))
Попробовал в новом приложении, действительно всё работает..в моём нет((
Может дело в родителе? или ещё в чем-то?
Maks57 вне форума Ответить с цитированием
Старый 24.11.2009, 00:17   #7
Maks57
 
Регистрация: 23.11.2009
Сообщений: 8
По умолчанию

Всё, разобрался. Добавил строчку
a[i].Name:='CheckBox' + inttostr(i);

Всё работает, спасибо большое =)
Maks57 вне форума Ответить с цитированием
Старый 24.11.2009, 00:19   #8
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Я же писал Дело в названии компонента например я без понятия какое при создании динамически он задаёт ему имя (не против был бы узнать ), если вы будете задавать его тут со всеми свойствами:
Код:
2: begin
a[i]:=TCheckBox.Create(Self);
a[i].Parent:=TestForm;
a[i].Left:=460;
a[i].Caption:=DM.Question_ident_proc.Fi eldByName('Answer_text').AsString;
a[i].top:=100 + i*20;
inc(i);
end;
т.е. так a[i].name:='имя компонента'; что то типа такого 'CheckBox'+IntToStr(j); в параметре j хранится число уже созданных компонентов. Чтобы не было повтора. То тот код заработает.

Цитата:
Сообщение от Maks57 Посмотреть сообщение
Всё, разобрался. Добавил строчку
a[i].Name:='CheckBox' + inttostr(i);

Всё работает, спасибо большое =)
Опоздал
dr.Chas вне форума Ответить с цитированием
Старый 24.11.2009, 00:20   #9
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Можете попробовать удалять существующие компоненты перед созданием новых.
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 24.11.2009, 00:24   #10
Maks57
 
Регистрация: 23.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Опоздал
Ничего))) ещё раз спасибо))
Maks57 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение Golovastik Общие вопросы C/C++ 13 27.08.2009 17:30
Динамическое программирование. MAKEDON Помощь студентам 6 26.08.2009 14:10
Динамическое суммирование cat2182 Microsoft Office Excel 1 19.11.2008 07:53
TCheckBox JRcoker Общие вопросы Delphi 4 20.09.2008 07:36
Динамическое MainMenu dr.Chas Общие вопросы Delphi 4 24.06.2008 20:33