我的代码如下:
procedure TForm3.DBGrid1DblClick(Sender: TObject);
var
  str,gddm,con:string;
begin
      
     str:=dbgrid1.SelectedField.AsString;
    if str<>'' then
      begin
         if Application.MessageBox('是否导入该条记录?','提示',mb_okcancel)=idok then             begin
             gddm:=dbgrid1.Columns[1].Field.asstring;
             con:=dbgrid1.Columns[2].Field.asstring;
             end;
               begin
                form1.Edit1.Text:=gddm;
                form1.memo1.Text:=con;
                form1.BringToFront;
               end;             end;
end;
我开发的是mdi程序,由于我的Form1不是程序一执行就创建而是点了相应菜单或按钮才创建的,所以 form1.Edit1和form1.memo1在内存中还根本不存在,系统报错了,请问有没有办法不改变当前这种form1创建过程,而又能解决问题的方法?

解决方案 »

  1.   

    在TForm3里申明几个变量保存数据,等Form1创建后再赋值
      

  2.   

    这样吧,使用个最简单的方法吧!
    在你的主窗体FormMaster上看不到的地方旋转两个TLable控件 Lable1和Lable2。
    然后把下面两名代码
                    form1.Edit1.Text:=gddm;
                    form1.memo1.Text:=con;
    改为
        FormMaster.Label1.Caption := gddm;
        FormMaster.Label1.Caption := con;
    然后,再在你的Form1.OnActivate事件中添加代码
        Edit1.Text := FormMaster.Label1.Caption;
        Memo1.Text := FormMaster.Label1.Caption;
    这样,只要你一调用Form1时,Edit1和Memo1中就是你想要的内容了。而且,主窗体肯定是一开始就创建的,就不会发生你原来的问题了。
      

  3.   

    不好意思,上面的贴子中的
    在你的主窗体FormMaster上看不到的地方旋转两个TLable控件 Lable1和Lable2。
    应当为
    在你的主窗体FormMaster上看不到的地方放置两个TLable控件 Lable1和Lable2。