我的程序是mdi的,从childform1 的一个button打开childform2,然后再childform2关闭时把childform2上的变量值传递给childform1的stringgrid我这样写,在childform2的close事件写代码如下:var
s:string;
begin
try
s:='hello';
fmchildform1.stringgrid1.Cells[5,fmchildform1.stringgrid1.Row]:=s;
except
on e:exception do
begin
showmessage(e.Message);
end;
end;但是没办法传值,错误如下:
Access violation at address 004BD5FB in module 'mdiapp.exe'. Read of address 000002E0
我在sdi程序中作过类似的动作就可以。各位帮帮忙。

解决方案 »

  1.   

    假定你的childform1的类名是TChildForm1,并且你的MDI主窗口的名称是MDIFrame,;
    在childform2的close事件写代码如下var
      i:Integer;
    begin
      for i:=0 to MDIFrame.MDIChildCount-1 do
      begin
        if MDIFrame.MDIChildren[i] is TChildForm1 then
        begin
          TChildFrom1(MDIFrame.MdiChildren[i]).stringgrid1.Cells[5,TChildFrom1(MDIFrame.MdiChildren[i])..stringgrid1.Row]:='hello';
        end;
      end;
    end;
      

  2.   

    假定你的childform1的类名是TChildForm1,并且你的MDI主窗口的名称是MDIFrame;
    在childform2的close事件写代码如下var
      i:Integer;
    begin
      for i:=0 to MDIFrame.MDIChildCount-1 do
      begin
        if MDIFrame.MDIChildren[i] is TChildForm1 then
        begin
          TChildFrom1(MDIFrame.MdiChildren[i]).stringgrid1.Cells[5,TChildFrom1(MDIFrame.MdiChildren[i]).stringgrid1.Row]:='hello';
        end;
      end;
    end;
      

  3.   

    procedure Tfmkhedt.FormClose(Sender: TObject; var Action: TCloseAction);
    var
    i:integer;
    beginMainForm.fmkhedt:=nil;
    Action := caFree;
       for i:=0 to MainForm.MDIChildCount-1 do
      begin
        if MainForm.MDIChildren[i] is Tfmprodedt then
        begin
          Tfmprodedt(MainForm.MdiChildren[i]).sg1.Cells[5,Tfmprodedt(MainForm.MdiChildren[i])..sg1.Row]:='hello';
        end;
      end;
    end;
      

  4.   

    错误如下:兄弟[Error] khedt.pas(270): Incompatible types: 'Integer' and 'Tfmprodedt'
    [Error] khedt.pas(275): '.' expected but ';' found
    [Fatal Error] mdiapp.dpr(22): Could not compile used unit 'khedt.pas'
      

  5.   

    第一行错误对应这句:
    Tfmprodedt(MainForm.MdiChildren[i]).sg1.Cells[5,Tfmprodedt(MainForm.MdiChildren[i])..sg1.Row]:='hello';第二行错误对应最后一个end, begin与end数量相等了呀,为什么还出现这错误。如果我把上面那句去掉,或者去掉最后一个end,就可以去掉第二个错误,但是这样begin 比end 多一个。
      

  6.   

    to  firstshine(黑里透红) 
    谢谢了,哥们,我没注意看你的第二个回帖,所以出了一堆错误。