请问Delphi中的单元是不是UML中的包,两个单元间的互相引用如何避免?
经常会出现两个窗体之间要互相包含,例如
单击父窗体的按钮弹出一个对话窗体,在对话窗体上修改参数,来改变父窗体的某文本框的值,
我都是用两个窗体互相引用来做的,但总觉得违反了低耦合原则,
当然也可以用公共变量来回传值,但也觉得挺别扭
不知各位有什么高招没有?

解决方案 »

  1.   

    1.单元和包是两个概念。
    2.两个窗体之间可以传递参数。可以通过子窗体的formcreate方法来传递var 变量,或者子窗体返回参数值。
      前提是子窗体是动态创建,而不是使用Delphi为你自动生成的form1变量。
      

  2.   

    对话框上修改参数后,触发一个事件,父窗体处理,或者你们对话框上修改参数后要等关闭才在父窗体上生效,可以这样处理,这也是通常的作法。
    procedure TMainFormButtonClick(Sender: TObject);
    var
      dialog: TXXXDialog;
    begin
      dialog := TXXXDialgo.Create(Self);
      try
        if dialog.ShowModal = mrOk then
        begin
          //在这里读取对话框上的值,修改父窗体的值。
        end;
      finally
        dialog.Free;
      end;
    end;