這個問題怎樣解決?急!!在線等待... (2分)

S

sydan

Unregistered / Unconfirmed
GUEST, unregistred user!
這是我在我的系統的登出按鈕中加入的命令!
if (messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=idok)then
begin
for i:=0 to mainform.MDIChildCount-1 do
begin
mainform.MDIChildren.close
//在某些Form中的OnCloseQuery事件中加入如何為新增或編輯時需要用戶確認存盤退出還是不存盤退去或都取消退出!
end;
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
end;
當我打開有OnCloseQuery事件的窗口時就不能出現登出畫面了,而當我在
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
這句前加上一句
if (messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=idok)then
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
那麼就可以通過了!!
這是怎麼回事呢??
但是加這麼多對話槓好麻煩啊!
 
呵呵,你加了对话框,它当然要出来,另外你的语句有点问题,删除MDICHILD时要用DOWNTO从
下面向上删除,不然会有问题
 
這是我在我的系統的登出按鈕中加入的命令!
if (messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=idok)then
begin
for i:=mainform.MDIChildCount-1 downto 0 do
begin
mainform.MDIChildren.close
//在某些Form中的OnCloseQuery事件中加入如何為新增或編輯時需要用戶確認存盤退出還是不存盤退去或都取消退出!
end;
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
end;
當我打開有OnCloseQuery事件的窗口時就不能出現登出畫面了,而當我在
 
TO:aizb
for i:=mainform.MDIChildCount-1 downto 0 do
變更后也不行啊,這是怎麼回事呢?
麻煩您了!@謝謝
 
将你的handle设为0!
 
可能是系统没有来得及搞定变量的转换问题吧!你将
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
换成
if mainform.MDIChildCount=0 then
begin
seleep(2000);//拖延两秒,^_^
mainform.FormShow(sender);//運行登出畫面
end;
如何?搜主义??[:D][8D][:(]

 
TO:飘飘然;徐永进
先謝謝您的支持!
還是行不通呢!煩請再幫試試!
 
你需要一个变量来保存交互的结果。
然后根据 变量的 值来决定对话框是否弹出询问!
当然了,for 语句的 Down 是少不了的。



 
To dxymzj:
你的方法虽然可以勉强解决问题,但这是笨方法。
To sydan:
你这个问题的原因是MDI子窗体先于MDI主窗体获得Message,最好的解决办法应该是
把Message拦截下来,然后交给主MDI主窗体的OnClose事件去处理。
 
最简单的方法是,你的登录窗口不用MDI窗口而用普通窗口,在工程启动时创建,在主窗口启动后关闭就可以了。
 
messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)
只是显示一个对话框,但并不是系统级的模式窗,
也就是说程序并不会停下来等待您的选择,
增加 MB_TASKMODAL 属性。
 
To:ning_ning
不行的,我剛試了,
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
這一句中的Mainform.MDIChildCount的值還是等于原來的值,並沒有少!!
我想可能是要像數據庫一樣要刷新一下吧!但我還知道該如何是好!!
sydan
 
这问题小意思,可惜分数太少,不想回答
 
TO:魔鬼大师
分不成問題,只要你能幫我解決這問題.我可以再加分給你.
因為我在發這個貼時身上基本沒有多少分了,故請諒!
sydan
 
我要去w2k下test,不能答复你。或许是系统消息发送时序问题。
 
if (messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=idok)then
begin
for i:=0 to mainform.MDIChildCount-1 do
begin
mainform.MDIChildren.close
//在某些Form中的OnCloseQuery事件中加入如何為新增或編輯時需要用戶確認存盤退出還是不存盤退去或都取消退出!
end;
Application.ProcessMessages ;
if mainform.MDIChildCount=0 then mainform.FormShow(sender);//運行登出畫面
end;
 
if (messagebox(handle,'現在要登出嗎','登出',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2)=idok)then
begin
With MainForm Do
Begin
While MDIChildCount>0 do ActiveMDIChild.Close;
FormShow(Nil);//運行登出畫面
End;
end;
 
在Project中将是FormStyle=fsMdiChild的Form不Auto_Create
 
message catch......
 
顶部