Показать сообщение отдельно
  #4  
Старый 16.05.2009, 13:39
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Вообще, мне кажется, вместо динамического создания здесь можно менять свойство Visible и не мучиться.
Во-вторых, у вас в этой процедуре объекты TLabel создаются каждый раз одни и те же, поэтому их, я думаю, логичнее тоже создать лишь однажды (design time)...
Но если я вас не убедила, то в целом можно переделать ваш код так:
Код:
procedure TForm6.ComboBox1Change(Sender: TObject);
var
  ComboBox3:TComboBox;
  ComboBox4:TComboBox;
  Edit1:TEdit;
  Edit2:TEdit;
  i:integer;
begin
  // если компоненты присутствуют — удаляем
  Edit1 := TEdit(FindComponent('Edit1'));
  Edit2 := TEdit(FindComponent('Edit2'));
  ComboBox3 := TComboBox(FindComponent('ComboBox3'));
  ComboBox4 := TComboBox(FindComponent('ComboBox4'));
  if Edit1 <> nil then Edit1.Free;
  if Edit2 <> nil then Edit2.Free;
  if ComboBox3 <> nil then ComboBox3.Free;
  if ComboBox4 <> nil then ComboBox4.Free;

  ComboBox2.Items.Clear;
  if ComboBox1.Text='Пластинчатый' then
  begin
    ComboBox3:=TComboBox.create(self);
    ComboBox3.Parent:=Form6;
    ComboBox3.Name := 'ComboBox3'; // присваиваем имя, чтобы найти потом
    ComboBox3.Left:=304;
    ComboBox3.Top:=54;
    ComboBox4:=TComboBox.create(self);
    ComboBox4.Parent:=Form6;
    ComboBox4.Name := 'ComboBox4';
    ComboBox4.Left:=304;
    ComboBox4.Top:=104;

    ComboBox2.Items.Add('ЭГА-1-10-6-4-2');
    ComboBox2.Items.Add('ЭГА-1-10-6-6-3');
    ComboBox2.Items.Add('ЭГА-20-9-6-2');
    ComboBox3.Items.Add('4');
    ComboBox3.Items.Add('6');
    ComboBox3.Items.Add('8');
    ComboBox4.Items.Add('2');
    ComboBox4.Items.Add('3');
    ComboBox4.Items.Add('4');
    Label1.Caption:='Число электродов';
    Label2.Caption:='Число электрополей';
  end
  else
    if ComboBox1.Text='Трубчатый' then
      begin
        Edit1:=TEdit.create(self);
        Edit1.Parent:=Form6;
        Edit1.Name := 'Edit1';
        Edit2:=TEdit.create(self);
        Edit2.Parent:=Form6;
        Edit2.Name := 'Edit2';
        ComboBox2.Items.Add('С-5');
        ComboBox2.Items.Add('ПГ-8');
        ComboBox2.Items.Add('ДМ-316');
        Label1.Caption:='Длина труб';
        Label2.Caption:='Диаметр труб';
      end;
end;
Объекты Label1 и Label2 я поставила на форму статически at design time. Ибо смысла создавать всякий раз одни и те же абсолютно одинаковые компоненты я не вижу.
Ответить с цитированием