為什麼我按一次菜單就顯示一次窗體 (0分)

  • 主题发起人 主题发起人 Framer
  • 开始时间 开始时间
F

Framer

Unregistered / Unconfirmed
GUEST, unregistred user!
我通過菜單調用子窗體,是先 create(self),這後再 show,
為什麼我點擊一次菜單就顯示一個窗體,而不是隻要窗體
顯示出來了,下次點擊的時候就不會再顯示出來,這樣造
成同一個窗體顯示出多個。
我的窗體不是自動創建的,代碼如下:
procedure TMDIForm.N11Click(Sender: TObject);
begin
DStuffCode:=TDStuffCode.create(self);
DstuffCode.show;
end;

在線等待。。。。
 
这样写当然是出现多个,呵呵
这样试一试:
procedure TMDIForm.N11Click(Sender: TObject);
begin
if DStuffCode = nil then
DStuffCode:=TDStuffCode.create(self);
DstuffCode.show;
end;
 
TO:jianl
謝謝jianl,按你的方法去做是可以避免顯示多個相同的窗體,
但隨之又出現了新的問題:
在我關閉這個窗體之後,下次調用的時候就出錯了。。。
 
try
if not Assigned(DStuffCode) then
DStuffCode:=TDStuffCode.Create(self);
DstuffCode.ShowModal;
finally
DstuffCode.Free;
DstuffCode := nil;
end;
 
最好在Form的DESTORY中释放。
 
为什么free呢?是不是很累?
如果目标机器是win2k就不用考虑资源的问题。
一般为了提高程序载入速度,我使用使用才创建,但不free.
 
我明白你的意思了,最好设置一个标志在TMDIForm中
因为DStuffCode出了函数后就无效了,
对MDI如果是动态生成,最好还是用FREE。
 
dont free is dangoues
 
To:emonster
我想你的方法應該是可行的。可惜的是我現在還不會這麼處理。。。。
能不能指導一下。謝謝。
 
你究竟是showmodal还是show?
 
我是用的 SHOW
 
我这台机器上没有源码,写个思路吧
写一个过程,两个参数,为窗体的类名和标题
在过程中遍历application的所有窗体,如果存在相同的窗体类则
显示并激活,否则建立窗体
所有非主窗体的窗体打开都应调用这个过程
如果要free窗体最好free后再=nil;
或用freeandnil(object);
 
接受答案了.
 
后退
顶部