本帖最后由 luojianfeng 于 2011-01-29 17:34:06 编辑

解决方案 »

  1.   

    很简单的问题啊。
    所有A B C 。 窗体不是都引用了一个 Y窗体了么?调用y窗体之前 先把自己窗体里的那个edit控件当参数传过去
    在y窗体里改变调用窗体数据这样写
    (TEdit)aaa.text:='...';
    就可以了啊,aaa为传过来的参数
      

  2.   

    通常都是 几个窗体都引用y窗体
    而调用y窗体的时候都动态创建一个y窗体。
    创建的同时 利用构造函数把edit传过去
      

  3.   


    procedure TFormXsdAdd.SpeedButton1Click(Sender: TObject);
    begin
      FormSelectWldw.ShowModal;
    end;子
    procedure TFormSelectWldw.DBGridEh1DblClick(Sender: TObject);//双击选择数据
    begin
      FormXsdAdd.Edit1.Text:=ADOQuery1.FieldByName('bh').AsString;
    end;
    开始我是这样写死的,不行的,楼上的能把代码也贴出来吗?
      

  4.   

    这都还不会?
    那给你个简单的窗体Y的 public里加个
    inEdit:TEdit;窗体A B C 调用窗体Y的时候这样
    frmY.inEdit:=edit1;
    frmY.ShowModal;
    其中 A中的edit1 就是要被窗体Y改变数据的。窗体Y修改A中的edit1这样写
    inEdit.Text:=edit1.Text;
    这样简单了吧。需要解释么?
    窗体Y里申明了一个 inEdit,但是没有初始化。
    调用窗体Y之前 让这个对象指向窗体A的一个edit控件
    之后在窗体Y中使用inEdit 就相当于使用窗体A的edit1了
     
    明白了吧
      

  5.   

    ShowModal;说明不会有多个父窗口都打开着Y,楼上的方法是有效的
      

  6.   

    如果有多个窗体打开Y也可以那调用的时候 就不要直接调用Y
    而是申明一个新的窗体 初始化public frmTmp:TfrmY  frmTmp:=TfrmY.create(nil);
      frmTmp.inEdit:=edit1;
      frmTmp.show;