procedure TForm2.N1Click(Sender: TObject);
begin
s_xm:=DbGrideh1.SelectedField.ASstring;
with Tform1.Create(nil) do//不是很理解?
  begin
  showmodal;//不是很理解?
  free;//不是很理解?
  end;
form1.Table1.Locate('xingmin',s_xm,[]);//在程序初始化时建立form再hide用时show,此方法可行,为啥这里不行呢?
end;把Table1.Locate('xingmin',s_xm,[]);写在form1的oncreate和onshow中却作用在form2中?请指教!谢谢!

解决方案 »

  1.   

    with Tform1.Create(nil) do//不是很理解?
      begin
      showmodal;//不是很理解?
      free;//不是很理解?
      end;
    是动态创建窗体,以减少资源的占用。最好写成这样:      try
            Form1:=TForm1.create(nil);//创建窗体,调用构造函数
            Form1.showmodal; //显示为模式窗体
          finally
            Form1.free;//释放窗体资源,调用析构
          end; form1.Table1.Locate('xingmin',s_xm,[]);//你的FORM1和FORM2是不是共用了一个TABLE
      

  2.   

    to cg1120(代码最优化-§新年祝福你,好运伴着你§) :
    谢谢!
    我有些概念不清,想继续请教:
        Form1.showmodal; //显示为模式窗体。何为模式窗体?
      

  3.   

    我初学啊,讲一讲好吗?谢谢!
    with Tform1.Create(nil) do
      begin
      showmodal;//刚建的form1为何下句就释放呢?
      free;//form1释放后为啥还可见呢?难道释放的不是form1?
      end;
    总之:创建的什么?又释放的什么呢?
      

  4.   

    showmodal以后,form1在界面的嘴上层,其他窗体不可操作,程序不会执行到free这一句,当form1 close以后,程序才会执行到free,窗体才会释放。
      

  5.   

    procedure TForm2.N1Click(Sender: TObject);
    begin
    s_xm:=DbGrideh1.SelectedField.ASstring;
    with Tform1.Create(nil) do//不是很理解?
      begin
      showmodal;//不是很理解?
      free;//不是很理解?
      end;到这里的时候,form1对象已经不存在了,执行下面的程序肯定出错啊。
    form1.Table1.Locate('xingmin',s_xm,[]);//在程序初始化时建立form再hide用时show,此方法可行,为啥这里不行呢?
    end;
      

  6.   

    你的form1已free了,
    form1.Table1.Locate('xingmin',s_xm,[]);//当然访问不到form1了
    强烈建议看书先!
      

  7.   

    to xdf_hubei(残月) :
    谢谢!
    谢谢大家!很快就结贴!