在我的MDI父窗体有一个Mainmenu组件,在其中一个菜单上的onClick事件中有如下代码:
procedure TfrmMain.N4Click(Sender: TObject); //N4是菜单名。
var frmJDTZ: TfrmJDTZ;
var i:integer;
begin
for i:=0 to frmJDTZ.MDIChildCount do
if frmMain.MDIChildren[i].Caption<>'借贷台帐' then //判断有无重复窗体。
begin
frmJDTZ:=TfrmJDTZ.Create(Application);
frmJDTZ.Show;
end;
end;这样可以动态创建 frmJDTZ这个窗体。而在MDI父窗体的speedbutton组件的onClick事件中,我使用与上面相同的代码,程序运行时报错。报错信息如下:
“Access violation at address 004A20BD in module 'FBC.exe'. Read of address 0000025D”请各位高手解答,小弟不胜感激。
procedure TfrmMain.N4Click(Sender: TObject); //N4是菜单名。
var frmJDTZ: TfrmJDTZ;
var i:integer;
begin
for i:=0 to frmJDTZ.MDIChildCount do
if frmMain.MDIChildren[i].Caption<>'借贷台帐' then //判断有无重复窗体。
begin
frmJDTZ:=TfrmJDTZ.Create(Application);
frmJDTZ.Show;
end;
end;这样可以动态创建 frmJDTZ这个窗体。而在MDI父窗体的speedbutton组件的onClick事件中,我使用与上面相同的代码,程序运行时报错。报错信息如下:
“Access violation at address 004A20BD in module 'FBC.exe'. Read of address 0000025D”请各位高手解答,小弟不胜感激。
if frmJDTZ=nil then
frmJDTZ:=TfrmJDTZ.Create(Application);
试试如下:
if frmJDTZ=nil then
frmJDTZ:=TfrmJDTZ.Create(Application);
frmJDTZ.Show;同时,在frmJDTZ子窗体的OnClose事件中添加一行代码:
Action:= CaFree;
Good luck!
如果如楼住所说,就是子窗体的设置问题.我觉的你的代码有很大的漏洞:
if frmJDTZ=nil then
frmJDTZ:=TfrmJDTZ.Create(Application);
frmJDTZ.Show;
-------------------
应该是这样才对啊:
if frmJDTZ=nil then
frmJDTZ:=TfrmJDTZ.Create(Application)
else frmJDTZ.Show;
begin
for i:=0 to frmJDTZ.MDIChildCount do
if frmMain.MDIChildren[i].Caption <> '借贷台帐' then //判断有无重复窗体。
begin
frmJDTZ:=TfrmJDTZ.Create(Application);
frmJDTZ.Show;
end;
end;
试想,在子窗体的子窗体中遍历,然后操作主窗体?另外,楼主的代码本人试过,没有问题。
看看是否是你的Delphi版本、环境有问题。
本人就遇到过莫名其妙的问题:开始,编写代码、编译、运行都没有问题。但不知从何时起,无法编译、运行了,将源代码放到另外一台机器上,一切OK。而且,即使运行编译过的可执行文件,也提示错误。只有在使用ASPack压缩后问题得以解决。至今一头雾水。