点击A窗口的button1按纽打开B窗口,在B窗口中输入完资料后点“保存”,但B窗口有时能自动关闭,有时却又不能,为什么? ( 积分: 100 )

D

doby_li

Unregistered / Unconfirmed
GUEST, unregistred user!
如:<br>点击A窗口的一个button按纽:<br>procedure&nbsp;Tmonimain.lblW_E44FClick(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>lblW_E44F.Enabled:=false;<br><br>//省略一部分代码<br><br>setrateprice.Showmodal;<br>screen.Cursor:=crdefault;<br>lblW_E44F.Enabled:=true;<br><br>end;<br><br>以下是点击B窗口的“确定保存”按纽:<br>procedure&nbsp;Tsetrateprice.Tsbn_101Click(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>Tsbn_101.Enabled:=false;<br><br>//中间这段是对oracle数据库进行的一些读写操作,比较耗时,大约要10秒。<br><br>screen.Cursor:=crdefault;<br>Tsbn_101.Enabled:=true;<br><br>setrateprice.hide;<br>setrateprice.close;<br><br>end;<br><br>我的流程是:<br><br>点击A窗口的button1按纽打开B窗口,在B窗口中输入完资料后点“保存”,然后将保存成功或失败的信息显示在A窗口的memo1上面,再自动关闭B窗口。<br><br>但现在的问题是:B窗口有时能自动关闭,有时却又不能,为什么?<br>请各位大虾指点!对于这种流程的设计大家通常是如何处理的?<br><br>先谢了。
 
楼主是以模式方式显示的B窗体,所以在B窗体的按钮事件中不用调用Close方法,只需要对B窗体的ModuleResult赋一个非mrNonew值即可。<br><br>以下是点击B窗口的“确定保存”按纽:<br>procedure&nbsp;Tsetrateprice.Tsbn_101Click(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>Tsbn_101.Enabled:=false;<br><br>//中间这段是对oracle数据库进行的一些读写操作,比较耗时,大约要10秒。<br><br>screen.Cursor:=crdefault;<br>Tsbn_101.Enabled:=true;<br><br>setrateprice.ModuleResult&nbsp;:=&nbsp;mrOK;<br>end;
 
把&nbsp;&nbsp;setrateprice.close;&nbsp;&nbsp;去掉.
 
就是&nbsp;lynch2611&nbsp;了!
 
因为对oracle的操作时间比较长,而且有不确定性,<br>我感觉就是程序有时没能执行close;这句。<br>这时的form2窗口点关闭也关闭不了,没有反应。<br><br>第一次见到这种奇怪的问题。
 
点击A窗口的一个button按纽:<br>procedure&nbsp;Tmonimain.lblW_E44FClick(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>lblW_E44F.Enabled:=false;<br><br>//省略一部分代码<br><br>setrateprice.Showmodal;<br>screen.Cursor:=crdefault;<br>lblW_E44F.Enabled:=true;<br><br>end;<br><br>以下是点击B窗口的“确定保存”按纽:<br>procedure&nbsp;Tsetrateprice.Tsbn_101Click(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>Tsbn_101.Enabled:=false;<br>try<br>//中间这段是对oracle数据库进行的一些读写操作,比较耗时,大约要10秒。<br>finally<br>&nbsp;&nbsp;screen.Cursor:=crdefault;<br>&nbsp;&nbsp;Tsbn_101.Enabled:=true;<br>&nbsp;&nbsp;setrateprice.ModalResult&nbsp;=&nbsp;mrOK;<br>end;<br>end;
 
点击A窗口的一个button按纽:<br>procedure&nbsp;Tmonimain.lblW_E44FClick(Sender:&nbsp;TObject);<br>begin<br>screen.Cursor:=crHourGlass;<br>lblW_E44F.Enabled:=false;<br><br>//省略一部分代码<br><br>setrateprice.Showmodal;<br>screen.Cursor:=crdefault;<br>lblW_E44F.Enabled:=true;<br>if&nbsp;setrateprice.ModalResult&nbsp;:=mrok&nbsp;then&nbsp;<br>begin&nbsp;<br>.........&nbsp;数据库操作<br>end&nbsp;else<br>.........<br><br>end;<br><br>以下是点击B窗口的“确定保存”按纽:<br>procedure&nbsp;Tsetrateprice.Tsbn_101Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;setrateprice.ModalResult&nbsp;=&nbsp;mrOK;<br>end;<br>end;
 
痛苦了二天,终于解决了。但还不了解为什么会这样。<br>form1的按纽中用:setrateprice.Show;<br><br>form2的“确定提交”按纽中用:<br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setrateprice.Show;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;end;<br>就可以了。但不知为什么会这样,是不是delphi的bug?<br>等一会结贴。
 
多人接受答案了。
 
顶部