:) 今天是星期一,有很多高手开始上班了。这个捆饶我很久的问题可能可以得到解决了!快请进!!!:D 看看你的代码就知道有问题了,Button1和Button2都Free了窗体,当然出现错误了!!!!你的问题很简单。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、除了form1是自动的以外,其他窗口要动态产生。2、procedure TForm1.Button4Click(Sender: TObject);begin Application.CreateForm(TFrom2, From2); From2.showModal; From2.Free;end;end; /////////////请看注释////////////////////////////////procedure TForm1.Button1Click(Sender: TObject);begintryform2.show;finallyform2.free;end;end;procedure TForm1.Button2Click(Sender: TObject);begintryform2.showmodal;;------//form2已经释放了!!!,不能再showmodal了;finallyform2.free;end;end;procedure TForm1.Button3Click(Sender: TObject);begintryform3.create(self);;form3.show;finallyform3.free;end;end;procedure TForm1.Button4Click(Sender: TObject);begintryform3.create(self);;form3.showmodal;finallyform3.free;end;end;end. close啊,不要free除非是动态生成的form 用close很方便,但是事实是我在Windows2000的进程查看器里发现不用free的话,程序的占用空间会变大的。 “不要free除非是动态生成的form ”,但是是动态生成的form 好象也会报错的,怎么回事? 建议你动态创建除主窗体Form1外的其他窗体:如动态创建窗体Form2(注意要在project菜单下的options下将其他窗体从Auto-creat中移到右边)procedure TForm1.Button1Click(Sender: TObject);begin try Form2:=TForm2.creat(self); From2.showModal; finally From2.Free;end;end; 你现在的水平最好不要动态创建,释放是一个很麻烦的东西,你所有的窗口都是在工程文件里一次创建,程序中就不要再创建了,也不要free,占不了多少空间的,我的程序有上百个窗体,占用空间也不是很大啊你现在的问题肯定是你把某个窗体释放了,又要显示,这当然会出错 首先,你的这段代码:procedure TForm1.Button1Click(Sender: TObject);begintryform2.show;finallyform2.free;end;end;不会显示窗体,因为非模态窗体不会等待响应,所以刚show,就会free.另外的问题同其他人讲的一样,form2在你打算ShowModal之前,或者你没创建Create,或者是按了Button1,把Form2 free掉了。记住一点,非模态的窗体的释放要放在该窗体的OnCloseQuery事件里响应。 非模态的窗体就是非动态窗体吧?RIGHT? 如果你的动态窗体上有动态创建的空件,你要先释放那些控件,再释放窗体。最好是close后再释放,但是有些动态创建的控件应为已经在from中注册过了具体是Create(self) 还是parent=self起的作用记不太清了,释放窗体前不用再释放控件否则窗体释放时你的控件已经释放,不能再释放,也要包错。还有你的窗体比如from2.free后你再用from2.show等等语句也会报错。 主要在于show, showmodal的区别.好好看相关的书 两个错误:1、create和free、show和close、showmodal和close必须配对使用,不能混合搭配。2、应该是form3 := TForm3.Create(Self);这是初学者容易犯的错误。 得到高人指点:用Application.createform(TForm,Form);Form.Showmodal;就可以了。 请注意动态的form还要写form1.free;form1:=nil;除非form1.onclose中 设置了 action = caFree 那么:请问Form1:=nil;是什么意思,有什么作用? to qiandeng(千灯) 能否解释一下? 什么时候用B/S,什么时候用C/S? listview 行顏色的問題 怎样在fast report中输出stringgrid的内容?[悬赏100分] 在delphi中控制Excel的问题~ 最近想弄一台笔记本,大家给个意见推荐一下那种产品型号还可以!:-) help me ! 急急急 尋找控件,哪有這樣的控件? 数组指针取值的问题 请问怎样增加可用分? yxjjx(孤行者):给你40分,进来就给! 我该如何读取一个文件的第XX字节呢? 谁能告诉我如何将一数据库中重复相同的数据记录提取出来(效率比较高的)算法告诉我?
2、
procedure TForm1.Button4Click(Sender: TObject);
begin
Application.CreateForm(TFrom2, From2);
From2.showModal;
From2.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
form2.show;
finally
form2.free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
try
form2.showmodal;;------//form2已经释放了!!!,不能再showmodal了;
finally
form2.free;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
try
form3.create(self);;
form3.show;
finally
form3.free;
end;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
try
form3.create(self);;
form3.showmodal;
finally
form3.free;
end;
end;end.
如动态创建窗体Form2(注意要在project菜单下的options下将其他窗体从Auto-creat中移到右边)
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Form2:=TForm2.creat(self);
From2.showModal;
finally
From2.Free;
end;
end;
释放是一个很麻烦的东西,你所有的窗口都是在工程文件里一次创建,
程序中就不要再创建了,也不要free,占不了多少空间的,
我的程序有上百个窗体,占用空间也不是很大啊
你现在的问题肯定是你把某个窗体释放了,
又要显示,这当然会出错
procedure TForm1.Button1Click(Sender: TObject);
begin
try
form2.show;
finally
form2.free;
end;
end;不会显示窗体,因为非模态窗体不会等待响应,所以刚show,就会free.另外的问题同其他人讲的一样,form2在你打算ShowModal之前,或者你没创建Create,或者是按了Button1,把Form2 free掉了。记住一点,非模态的窗体的释放要放在该窗体的OnCloseQuery事件里响应。
后你再用from2.show等等语句也会报错。
1、create和free、show和close、showmodal和close必须配对使用,不能混合搭配。
2、应该是form3 := TForm3.Create(Self);这是初学者容易犯的错误。
用Application.createform(TForm,Form);
Form.Showmodal;
就可以了。
动态的form还要写
form1.free;
form1:=nil;
除非form1.onclose中 设置了 action = caFree
能否解释一下?