我在公用unit中定义了一个string类型变量str,声明如下:var
  str:String;在主窗体F_main中showmodal一个查找窗体F_search,打开代码是:  F_search := TF_search.create(self);
  if F_xfgl_search.ShowModal = mrok then
  begin
     showMessage(str);//-----------显示为空白?为什么
  edn;在F_search中点"确定"按钮给str赋值,后返回mrok:  str := '11111';
  showmessage(str);//-------------显示为11111
  ModalResult := mrok;
问题:为什么返回主窗体后str为空字符串?各个单元该use都use了.

解决方案 »

  1.   

    你的逻辑错了
    你这样改一下
    ModalResult := mrok;str := '11111';
    showmessage(str);//-------------显示为11111你试试 应该可以的 
     
      

  2.   

    也就是把ModalResult := mrok; 
    放到str := '11111'; 的前面去
      

  3.   

    检查在F_search中是否也申明了名为str的变量,删掉它。
      

  4.   

    你的逻辑有点乱在F_search中点"确定"按钮给str赋值,后返回mrok: 
    但F_search := TF_search.create(self);
      if F_xfgl_search.ShowModal = mrok then这时候F_search才刚创建,你都没来得及按F_search中点"确定"按钮,
    给str赋值1111,就要求返回str的值,那肯定是空值。
      

  5.   

    设几个断点
    看看程序
    str := '11111';

    showMessage(str);
    这2句哪个先跑
    没赋值就show,当然为空了
      

  6.   

    这种数据传递根本没必要用全局变量
    自己弄个方法封装下ShowModal就行了。
    TF_xfgl_search.ShowDialog(var Str: string): Integer;
    begin
      Str := '11111';
      Result := ShowModal;
    end;
    调用就这样:
    F_search := TF_search.create(self);
    if F_xfgl_search.ShowDialog(str) = mrok then
    begin
      showMessage(str);
    end;