窗体的消失(10分)

  • 主题发起人 主题发起人 weixj2003ld
  • 开始时间 开始时间
W

weixj2003ld

Unregistered / Unconfirmed
GUEST, unregistred user!
我点击form1中的按钮弹出Form2,想让一个窗体form2在一个规定的时间点消失,消失时其上的Label的caption由hello变成“你好”,用timer控件(在Form1中)实现,在其事件中写入“Form2.close”,Form2消失了,但是再点击Form1中的按钮,弹出的form2时,其上的Label是“你好”,若在Timer事件中写入“Form2.Destroy”,出现“access violation at 000000”的错误提示?不是怎样解决?
 
用hide试试看
 
最好用 Form2.Free 而不要直接使用 Destory
 
你的Form1是非模式的吗?
在Form2.free.
后加Form2:=nil;
在form1.Button1Click中。
if Form2=nil then
Form2:=TForm2.Create(Application)
else
Form2.Show;
 
为什么要调用Form2.free,而不直接调用Form2.Destroy
form2.free--->Form2.Destroy
form2.free首先检查for2实例是否为空,不为空就调用Form2.Destroy,如果为空,form2:=nil;直接Form2.Destroy,若form2为空,就可能出现你上面的错误.
其他的就不说了,自己补充吧.
 
create FORM ,close form 要从内存中FREE。
 
我怎样在自动创建的窗体中加入Label等控件呢?
 
你把LABEL控件放到窗体上,而这个窗体不要自动创建,你手动创建不就得了。
 
请问怎样一次动态地创建多个Image控件?Image控件的位置不一样?
 
对于楼主的问题需要说明的是
1.Form.Close的默认属性是Hide,所以在重新Show的时候会出现“你好”
2.上面很多朋友说得将Destroy改为Free,其实在Delphi的帮助中明确建议释放窗体用Resease代替Free
3.楼主出现错误access violation at 000000并非以上朋友说的用Free就可以解决,错误是因为你在Timer的OnTimer事件中写Free的代码。Timer每隔一定时间执行一次里面的代码,第一次的时候将窗体Free,以后再Free的时候就会出现内存的错误。
4.楼主可以在其他位置释放Form2,若非要在Timer.Timer中释放,可以在释放后加上Timer.Enabled:=False;
5.动态创建多个Image可以参考我在http://www.delphibbs.com/delphibbs/dispq.asp?lid=2623563中的回答
 
唉,真是无话可说了。
大哥们,Form2是Delphi自己创建的,只有Delphi才有权在程序结束后释放,你是没有权利释放的。所以你不管用Free还是Destroy都会出错,Release就更离谱了(Resease!?汗~是Release吧,大哥)。
点击Delphi主菜单上的Project/Options...选择Form页,看到左边的列表框了吗?那是你这个工程中所有Delphi自动创建的对象(不光窗体可以自动创建,Data Module也可以),选中Form2,然后点“>”把它改成我们自己手动创建。
在在Form1中的Uses段加入Form2,把Form2引用进来。然后在Private段加入Form2: TForm2;
在程序中加两个Button,双击更改代码。
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:= TForm2.Create(Self);
Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Free;
end;
讲的够清楚了吧
 
接受答案了.
 
后退
顶部