这是主Form中调用子Form的代码
procedure TFormUser.N_search_uClick(Sender: TObject);
begin
  FormQuery := TFormQuery.Create(Application);
  try
    FormQuery.ShowModal;
  finally
    FormQuery.Free;
  endend;
这是子form中button的代码
procedure TFormQuery.Button_searchClick(Sender: TObject);
var
  query_project1, query_condition1, query_input1 : string;
  query_project2, query_condition2, query_input2 : string;
begin  SQL_select := 'select * from user_t ';
  SQL_select := SQL_select + 'where ';
  SQL_select := SQL_select + query_project1 + query_condition1 ;
  SQL_select := SQL_select + query_input1;  //调用FormUser中的查询函数
  FormUser.QueryUser(SQL_select);  FormQuery.Hide;
  FormQuery.Free;end;

解决方案 »

  1.   

    两个窗体能互相调用吗?
    你不如设置一个全局字符串变量,在查询窗体中给字符串赋值;
    主窗体调用查询窗体(showmodal)后,等待查询窗体的关闭,
    关闭后,在主窗体中根据全局字符串进行查询。另外还可以设置一个全局布尔变量:当其值为True时,表示查询窗体中用户单击了”确定“按钮;为False时,表示用户单击了”取消“按钮。这样在主窗体中首先检测该布尔变量的值是否为
    True,若是,则进行查询;否则不查询。
    该布尔变量是在查询窗体中被赋值的。
      

  2.   

    如果不用showmodal,那用什么?用show,结果子Form只闪了一下就消失了
      

  3.   

    把那句 FormQuery.Free; 换成 Close;
    否则 ShowModal 不会返回,那么主窗口也就不能得到焦点了
      

  4.   

    formquery.hide和formquery.free换成formquery.close;
      

  5.   

    主窗口中子窗口的create的参数改为self,在加一句formquery.parent=self,这时用show和showmodal都可以了