在一个窗体里打开另外一个窗体
TfomrA=class(TFomr)
private
fomrB: TfomrB;
public
constructor Create; override;
destructor Destroy; override;
end;formb使用了三方控件EHLIBcreate的时候 formb:=TformB.create(nil);
destroy的时候 if Assigned(formb) then formB.Free;
调用的时候 formB.ShowModal;后期改为
try
formb:=TformB.create(nil);
finally
formb.free
end;
问题在于程序运行时,
1. 无论上面那种调用方式。不定期的出现打开formB后,鼠标移动到formb里面的gridEh控件上时
formB自动关闭,但是程序不会报错,try except end 检测不到错误,
由于在ide环境中没有重复到错误,所以不知道是不是有三方控件屏蔽了错误。
2. 在程序中有很多该窗体的实例,formA_1, formA_2, formA_3.......
如果formA_1出现formB窗体后,free掉formA_1后重新创建后,仍然会出现formA_1仍然会出错。
在同时formA_2, formA_3打开formB不会出错,free掉其后重新创建也不会出错。问题可能出现在什么地方呢?
TfomrA=class(TFomr)
private
fomrB: TfomrB;
public
constructor Create; override;
destructor Destroy; override;
end;formb使用了三方控件EHLIBcreate的时候 formb:=TformB.create(nil);
destroy的时候 if Assigned(formb) then formB.Free;
调用的时候 formB.ShowModal;后期改为
try
formb:=TformB.create(nil);
finally
formb.free
end;
问题在于程序运行时,
1. 无论上面那种调用方式。不定期的出现打开formB后,鼠标移动到formb里面的gridEh控件上时
formB自动关闭,但是程序不会报错,try except end 检测不到错误,
由于在ide环境中没有重复到错误,所以不知道是不是有三方控件屏蔽了错误。
2. 在程序中有很多该窗体的实例,formA_1, formA_2, formA_3.......
如果formA_1出现formB窗体后,free掉formA_1后重新创建后,仍然会出现formA_1仍然会出错。
在同时formA_2, formA_3打开formB不会出错,free掉其后重新创建也不会出错。问题可能出现在什么地方呢?
解决方案 »
- 数据检索被限制
- 想获取存储过程返回值,报错。
- delphi webbrowser內存圖片到IMAGE
- 有没有给树节点的背景添加颜色的?
- 怎样实现程序切换功能?
- 怎么样判断edit1.text全是数字,而没有字母或其它符号??急 用!!!
- 各位帮帮忙;我在treeview中遍历的是文件夹和文件,怎样做能在treeview的节点上右击遍历文件夹或文件弹出快捷菜单(菜单中的内容有新建一级节点,二级节点,三级节点,四级节点,删除节点(其中1,2,3级节点是文件,4级节是txt文档)。
- delphi中如何调用帮助?我是初学者,请多多指教
- 网络数据交换系统如何设计。
- 请教各位前辈,如何控制鼠标只能在dbgrid中的一个单元格中移动
- 如何使文字在quickreport中居中
- 北京天地纵横软件有限公司诚聘Delphi程序开发人员
1.主窗口MainForm 创建了formA_1, formA_2, formA_3
2.formA_1创建formB ,formA_2创建formB,formA_3创建formB
( fomrB是TfomrA的一个成员,所以每一个TfomrA实例都可以创建一个FormB)
try
formb:=TformB.create(nil);
finally
formb.free
end;这样写代码,formB一创建,马上又释放,怎么用?
重复创建、释放一个窗口体,如果你用 if Assigned(formA_1)这种方法来判断时
释放时,最好用FreeAndNil(formA_1);
try
formb:=TformB.create(nil);
formb.showmodal; //======================================忘记写了
finally
formb.free
end;从SystUils.Pas中我们可以知道
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
FreeAndNil只是增加了Obj:=nil 的操作,因此问题不可能出现在这里的。