释放控件小问题,高手请进,在线急等之...........

时间:2021-03-31 17:38:11
form1为fsMDIForm窗体,form2为其子窗体 bitbtn1为主窗体form1上的按钮用来打开子窗体form2,form2关闭是会自动释放。
问题是:如果在form2里放置一QuickRep1控件,打开时就会出现Access violation异常(如果没有QuickRep1控件则一切正常),请高手指教!!!(当你反复单击bitbtn时会出现)

10 个解决方案

#1


我怀疑是Delphi的一个大漏洞

#2


呵呵,一般来说,不要先怀疑是Delphi的bug,检查检查一下自己的code先吧

贴贴你的bitbtn1的事件,以及form2的释放代码如Close,closequery等事件的代码

看看有什么问题.

#3


另外,检查一下工程选项中自动创建的form是怎么设置的

#4


其中:
bitbtn1的代码为:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  closechildfrm(Sender);//form1里的过程
  if not  assigned(form2) then
  begin
    form2:=tform2.create(nil);
    form2.show;
  end;
end;

procedure TForm1.closechildfrm(sender:tobject);
var
  I: Integer;
begin
  if form1.MDIChildCount<>0 then
  begin
  with Form1 do
    for I := MDIChildCount-1 downto 0 do
        form1.MDIChildren[I].Close;
  end; 
end;  


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin

  form2:=nil;
  action:=caFree;

end;

#5


就这么多代码,好郁闷呀

#6


怎么不回事儿???郁闷

#7


我用D6测试了,没有发现问题。
怀疑是你的Delphi的问题,我的D6装了补丁的。

#8


我用的是delphi7

#9


delphi7还要装补丁吗???在哪儿下呀

#10


没人在了吗?

#1


我怀疑是Delphi的一个大漏洞

#2


呵呵,一般来说,不要先怀疑是Delphi的bug,检查检查一下自己的code先吧

贴贴你的bitbtn1的事件,以及form2的释放代码如Close,closequery等事件的代码

看看有什么问题.

#3


另外,检查一下工程选项中自动创建的form是怎么设置的

#4


其中:
bitbtn1的代码为:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  closechildfrm(Sender);//form1里的过程
  if not  assigned(form2) then
  begin
    form2:=tform2.create(nil);
    form2.show;
  end;
end;

procedure TForm1.closechildfrm(sender:tobject);
var
  I: Integer;
begin
  if form1.MDIChildCount<>0 then
  begin
  with Form1 do
    for I := MDIChildCount-1 downto 0 do
        form1.MDIChildren[I].Close;
  end; 
end;  


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin

  form2:=nil;
  action:=caFree;

end;

#5


就这么多代码,好郁闷呀

#6


怎么不回事儿???郁闷

#7


我用D6测试了,没有发现问题。
怀疑是你的Delphi的问题,我的D6装了补丁的。

#8


我用的是delphi7

#9


delphi7还要装补丁吗???在哪儿下呀

#10


没人在了吗?