在我的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”请各位高手解答,小弟不胜感激。

解决方案 »

  1.   

    可以使用:
    if frmJDTZ=nil then
      frmJDTZ:=TfrmJDTZ.Create(Application); 
      

  2.   

    但从楼主提供的代码看仅操控了一个子窗体。
    试试如下:
    if frmJDTZ=nil then 
      frmJDTZ:=TfrmJDTZ.Create(Application);
    frmJDTZ.Show;同时,在frmJDTZ子窗体的OnClose事件中添加一行代码:
      Action:= CaFree;
    Good luck!
      

  3.   

    谢谢和这些没关系,您说的我都做了。就是菜单可以动态创建frmJDTZ这个窗体,而用按钮就创建不了,报错,怎么解决~~高手们。
      

  4.   

    在按纽里用"N4click"应该不会有问题;
    如果如楼住所说,就是子窗体的设置问题.我觉的你的代码有很大的漏洞:
    if   frmJDTZ=nil   then   
        frmJDTZ:=TfrmJDTZ.Create(Application);
    frmJDTZ.Show;  
    -------------------
    应该是这样才对啊:
    if   frmJDTZ=nil   then   
        frmJDTZ:=TfrmJDTZ.Create(Application)
    else frmJDTZ.Show; 
      

  5.   

    楼主的代码有误:
    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压缩后问题得以解决。至今一头雾水。