我在form里动态创建控件之后想release这个form总是出错,而且想重新打开会提示已经打开。
创建这些控件我也是在这里请教的,详情请看:http://expert.csdn.net/Expert/TopicView1.asp?id=2916247
请大家再次伸出援手!
贴上formcreat里的代码请大家看看有什么问题:
while not datamodule2.Query6.Eof do
        begin
          Panels[i]:=TPanel.Create(Self);
          Panels[i].Parent := Panel2;
          panels[i].Left:=panel3.Left;
          panels[i].Top:=panel3.Top+60*n;
          panels[i].Width:=panel3.Width;
          panels[i].Height:=panel3.Height;
          panels[i].Visible:=true;
          panels[i].Enabled:=true;
          Edits:=TEdit.Create(self);
          Edits.Parent:=Panels[i];
          Edits.Left:=edit5.Left;
          Edits.Top:=edit5.Top;
          Edits.Width:=edit5.Width;
          Edits.Height:=edit5.Height;
          edits.Text:='';
          //edits[i].
          Edits.Visible:=true;
          edits.Enabled:=true;
          Labels:=TLabel.Create(self);
          //Labels.HasParent;
          labels.Parent:=Panels[i];
          labels.Left:=label10.Left;
          labels.Top:=label10.Top;
          labels.Width:=label10.Width;
          labels.Height:=label10.Height;
          labels.Visible:=true;
          labels.Enabled:=true;
          comboboxs:=Tcombobox.Create(self);
          //Labels.HasParent;
          comboboxs.Parent:=Panels[i];
          comboboxs.Left:=combobox8.Left;
          comboboxs.Top:=combobox8.Top;
          comboboxs.Width:=combobox8.Width;
          comboboxs.Height:=combobox8.Height;
          comboboxs.Visible:=true;
          comboboxs.Enabled:=true;
          comboboxs.Text:='';
          labels.Caption:=fieldbyname('server_name').asstring;
          edits.Text:=fieldbyname('server_re').asstring;
          comboboxs.Items.Add('正常');
          comboboxs.Items.Add('不正常');
          Edits.Name := 'Edit' + inttostr(i);
          Labels.Name := 'Label' + inttostr(i);
          ComboBoxs.Name := 'ComboBox' + inttostr(i);
          edits.Text:=fieldbyname('server_re').asstring;
          comboboxs.Text:='';
          ComboBoxs.OnChange:=MyComboBoxChange;
          comboboxs.Style:=csDropDownList;
          next;
          i:=i+1;
          n:=n+1;
        end;我用free和freeonrelease试过都不行,请问哪位高手给点例程看看,指点一下。

解决方案 »

  1.   

    我怀疑是因为创建动态控件时,Create(self)有问题。看不到完整源码,不敢肯定。你仔细看看自己的代码,这个self在这里指的哪个Form。(我是这样想的,你想Release的Form应当不是主Form吧?那么就可能也是动态创建的,如果这个创建过程是在主Form里的,就要注意self到底指的是哪个控件了。如果代码能贴得更完整些就好了,至少包含Form的创建和Release部分。)
      

  2.   

    哪位高手帮忙解答一下?出错信息为:"Access Violation at address0000020F".到底怎么会出这个错?
      

  3.   

    form是通过按钮激发生成的,创建语句为:formschedule:=tformschedule.Create(application);
    to:web700,你要贴完整的是什么意思?全贴上来吗?我先贴一些吧:
    按钮激发事件调用的程序:
    procedure appschedule;
    begin
      formschedule:=tformschedule.Create(application);
    end;
    关闭form:
    procedure TFormschedule.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      formschedule.Release;
    end;
    这个form所定义的控件:
    type
      TFormschedule = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        GroupBox1: TGroupBox;
        ComboBox1: TComboBox;
        ComboBox2: TComboBox;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        ComboBox3: TComboBox;
        Label5: TLabel;
        Memo1: TMemo;
        Panel1: TPanel;
        SpeedButton1: TSpeedButton;
        Label6: TLabel;
        GroupBox2: TGroupBox;
        Label8: TLabel;
        Calendar1: TCalendar;
        TabSheet3: TTabSheet;
        GroupBox3: TGroupBox;
        GroupBox4: TGroupBox;
        TabSheet4: TTabSheet;
        Panel2: TPanel;
        Label9: TLabel;
        Panel3: TPanel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        GroupBox5: TGroupBox;
        Label4: TLabel;
        Label7: TLabel;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        Edit1: TEdit;
        Label17: TLabel;
        Memo2: TMemo;
        BitBtn2: TBitBtn;
        GroupBox6: TGroupBox;
        DBGrid1: TDBGrid;
        Label18: TLabel;
        ComboBox4: TComboBox;
        BitBtn3: TBitBtn;
        GroupBox7: TGroupBox;
        Label19: TLabel;
        Label20: TLabel;
        Label21: TLabel;
        RadioButton3: TRadioButton;
        RadioButton4: TRadioButton;
        Memo3: TMemo;
        BitBtn4: TBitBtn;
        ComboBox5: TComboBox;
        BitBtn5: TBitBtn;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton4: TSpeedButton;
        GroupBox8: TGroupBox;
        Label22: TLabel;
        Edit2: TEdit;
        SpeedButton5: TSpeedButton;
        ComboBox6: TComboBox;
        ComboBox7: TComboBox;
        Label23: TLabel;
        Label24: TLabel;
        BitBtn6: TBitBtn;
        GroupBox9: TGroupBox;
        DBGrid2: TDBGrid;
        Label25: TLabel;
        Label26: TLabel;
        Edit3: TEdit;
        Edit4: TEdit;
        SpeedButton6: TSpeedButton;
        SpeedButton7: TSpeedButton;
        Label27: TLabel;
        Label28: TLabel;
        Memo4: TMemo;
        DateTimePicker1: TDateTimePicker;
        Label10: TLabel;
        ComboBox8: TComboBox;
        Edit5: TEdit;
        UpDown1: TUpDown;
        BitBtn1: TBitBtn;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormShow(Sender: TObject);
        procedure SpeedButton5Click(Sender: TObject);
        procedure BitBtn5Click(Sender: TObject);
        procedure BitBtn3Click(Sender: TObject);
        procedure Calendar1Change(Sender: TObject);
        procedure BitBtn6Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ComboBox8Change(Sender: TObject);
        procedure MyComboBoxChange(Sender: TObject);
        procedure SpeedButton6Click(Sender: TObject);
        procedure Edit3Change(Sender: TObject);
        procedure Edit4Exit(Sender: TObject);
        procedure BitBtn4Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure ComboBox2Change(Sender: TObject);
        procedure ComboBox3Change(Sender: TObject);
        procedure SpeedButton1Click(Sender: TObject);
        procedure ComboBox4Change(Sender: TObject);
      private
        { Private declarations }  public
        { Public declarations }
      end;
      

  4.   

    上面打错了,应该是:to woodsway。谢谢!
      

  5.   

    formschedule.Release; 这一句不要在TFormSchedule.FormClose 中调用,它应该在与appschedule同样级别的地方调用。
      

  6.   

    不太明白,有相关例程吗?应该写在哪里?我其他form都是这样实现的,为什么其他form可以这里不可以?
      

  7.   

    你在主程序中调用appschedule创建此Form,用完后也在主程序中Release此Form。appschedule;
    //Do something
    formSchedule.Release;
      

  8.   

    那我在form里面进行的操作写在这里吗?不行啊,form出来之后还要在form上面进行操作啊!