安全的写法应该是:
if Assigned(myimg) then 
begin
  myimg.Free;
  myimg := nil;
end;>>它执行后,怎么连主窗体都不见了?
能把你创建它的代码帖出来看看吗?这样问很难估计是什么问题。

解决方案 »

  1.   

    myimg:=tlabel.create(form.Panel);
    myimg.parent:=form.Panel;
    myimg.top:=10;
    myimg.left:=10;
    谢谢!
      

  2.   

    错了
    myimg:=timage.create(form.Panel);
    myimg.parent:=form.Panel;
    myimg.top:=10;
    myimg.left:=10;
    谢谢!  
      

  3.   

    以下代码运行无问题,你试试>>它执行后,怎么连主窗体都不见了?
    这应该是其他代码引起的。如果想让大家帮你,就将所有代码帖出来巴。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      myimg:timage;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not assigned(myimg) then
      begin
        myimg:=timage.create(form1.Panel1);
        myimg.parent:=form1.Panel1;
        myimg.top:=10;
        myimg.left:=10;
        try
          myimg.Picture.LoadFromFile('a.bmp');//在同一目录放a.bmp
        except
        end;
      end;end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Assigned(myimg) then
      begin
        myimg.Free;
        myimg := nil;
      end;end;end.
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      Tfrmmain = class(TForm)
        Panel: TPanel;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmmain: Tfrmmain;implementation{$R *.DFM}procedure Tfrmmain.Button1Click(Sender: TObject);
    var myimg:tlabel;
    begin
            myimg:=tlabel.create(frmmain.Panel);
                    myimg.parent:=frmmain.Panel;
                    myimg.top:=10;
                    myimg.left:=10;
                    myimg.caption:='aaaa';end;procedure Tfrmmain.Button2Click(Sender: TObject);
    var myimg:tlabel;
    beginif Assigned(myimg) then
    begin
    myimg.Free;
    myimg:=nil;
    end;
    end;end.
    对不起,请不要见怪
      

  5.   

    你程序中定义myimg的位置错了,在
    procedure Tfrmmain.Button1Click(Sender: TObject);

    procedure Tfrmmain.Button2Click(Sender: TObject);
    内分别定义,它们就是两个分别独立的局部变量。
    要想在在两个过程中都能访问,就要将myimg定义为公用变量。
    定义公用变量可以在类内,也可以定义为全局变量。
    定义为全局变量的例子见上面。
    下面是修改后的类内变量的例子。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      Tfrmmain = class(TForm)
        Panel: TPanel;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        myimg:tlabel;//在这里定义
      public
        { Public declarations }
      end;var
      frmmain: Tfrmmain;implementation{$R *.DFM}procedure Tfrmmain.Button1Click(Sender: TObject);
    //var myimg:tlabel;这句不要
    begin
            myimg:=tlabel.create(frmmain.Panel);
                    myimg.parent:=frmmain.Panel;
                    myimg.top:=10;
                    myimg.left:=10;
                    myimg.caption:='aaaa';end;procedure Tfrmmain.Button2Click(Sender: TObject);
    //var myimg:tlabel;这句不要
    begin  if Assigned(myimg) then
      begin
        myimg.Free;
        myimg:=nil;
      end;
    end;end.