我在一个子窗口中加了一个BUTTON,实现的操作是,关闭本窗口,另外打开一个新的子窗口.可为什么关闭窗口后却打不开新的子窗口button中的代码如下:
procedure Ttx_1.BitBtn1Click(Sender: TObject);
begin
dm.bxxd_query.Connection:=dm.adoc;
dm.bxxd_query.SQL.Clear;
dm.bxxd_query.SQL.Add('select * from bxd where (zt=:dd) and (gssx-date()<2) order by dh' );
dm.bxxd_query.Parameters.ParamByName('dd').Value :='订单';
dm.bxxd_query.Open;
if bx_xd=nil then
bx_xd:=Tbx_xd.Create(self);
bx_xd.Show;
tx_1.Close;
end;
我在tx_1中的onclose的代码如下.
action := cafree;
tx_1 := nil;
tx_1的建立是在菜单下建立
if tx_1=nil then
tx_1:=Ttx_1.Create(self);
tx_1.Show;
可为什么点了按钮后bx_xd确没显示,当我把按钮中的tx_1.Close;取消后就可正常显示bx_xd.可tx_1却没关闭,这是为什么.有什么没法解决
procedure Ttx_1.BitBtn1Click(Sender: TObject);
begin
dm.bxxd_query.Connection:=dm.adoc;
dm.bxxd_query.SQL.Clear;
dm.bxxd_query.SQL.Add('select * from bxd where (zt=:dd) and (gssx-date()<2) order by dh' );
dm.bxxd_query.Parameters.ParamByName('dd').Value :='订单';
dm.bxxd_query.Open;
if bx_xd=nil then
bx_xd:=Tbx_xd.Create(self);
bx_xd.Show;
tx_1.Close;
end;
我在tx_1中的onclose的代码如下.
action := cafree;
tx_1 := nil;
tx_1的建立是在菜单下建立
if tx_1=nil then
tx_1:=Ttx_1.Create(self);
tx_1.Show;
可为什么点了按钮后bx_xd确没显示,当我把按钮中的tx_1.Close;取消后就可正常显示bx_xd.可tx_1却没关闭,这是为什么.有什么没法解决
解决方案 »
- 解码问题 收取邮件的解码问题
- delphi 除去后缀名
- try...except....结构中,如果发生异常,执行完except中的语句后,还会不会执行下面的语句?
- 如何提高ADODataSet数据存成txt文件的速度?
- !!!请高手指点 XPMenu 的工作原理!!!
- 请教一下chdir这个函数怎么用?
- 如何实现32字节整数的高字节与低字节之间转化?
- 向高手求解Delphi问题
- 请问,在DELPHI中如何进行16进制运算,数据类型要如何定义?
- 做个小调查
- delphi7版本以及前有能够实现所见即所得的html编辑功能的吗?
- Delphi xlsreadwriteii控件读Delphi标签页内容为乱码?
因为你的bx_xd表单是在TX_1中被建立的,父一级窗体关闭时,肯定将所有子窗体一起关闭。
如果你想在显示bx_xd时,不想看到TX_1,那么可以隐藏,在关闭bx_xd时,再关闭TX_1窗体。
bx_xd.Show;
tx_1.Close;
改为
tx_1.Hide;
bx_xd.Show;
//tx_1.Close;
我用showwindow(tx_1.handle, sw_hide);隐藏窗口,第一次bx_xd窗口会正常显示,而tx_1也会隐藏掉,当系统不退出。第二次重新操作。点击button时会出错这是什么原因,如何解决
改成
tx_1:=Ttx_1.Create(Application);
或者
tx_1:=Ttx_1.Create(nil);
tx_1:=Ttx_1.Create(application);
bx_xd:=Tbx_xd.Create(self);
bx_xd.Show;
tx_1.Close; 改为if bx_xd=nil then
bx_xd:=Tbx_xd.Create(Application)
else
bx_xd.Show;
tx_1.Close;
if bx_xd=nil then
bx_xd:=Tbx_xd.Create(self);
bx_xd.Show;
tx_1.Close;
end;bx_xd是一个窗体类的变量,没错吧? bx_xd:=Tbx_xd.Create(self); 这句是将bx_xd实例化,没错吧?
那么楼上的朋友们有没有想过Tbx_xd.Create(self)这句的Create方法需要的参数是甚?这个参数是用来
做甚滴? 这里的Create方法需要传入一个Owner参数,Owner参数是拿来做甚滴? 不用我说了吧.
Tbx_xd.Create(self); 这句传入了self,这里self就是tx_1,没有错吧? 那么tx_1.Close; 这句是把
tx_1销毁了,那么此时bx_xd也会跟着被销毁.改为 tx_1:=Ttx_1.Create(application); 是对的(这个楼上已经有人指出来了).
不过,如果你还是没有能把你想要的窗体正确显示出来,我觉得就很遗憾了,个人认为应该是你程序的流程不
正解所致.写程序一定要明确整个程序的运行流程,学会分析流程和跟踪调试程序是非常重要滴. 相信你会搞定这个小问题的. GOOD LUCK.