使用全局变量保存,如果使用私服域,在MidFrom外不能调用。

解决方案 »

  1.   


    如果用全局变量。那么同时创建两个midform的时候。变量会冲突。。
      

  2.   


    如果用全局变量。那么同时创建两个midform的时候。变量会冲突。。怎么可能冲突呢?
    每个实例的变量都有对应的内存地址,不同实例的变量是不同的内存,共有私有只是控制他们是否可以被外界访问。
      

  3.   

    frmMain为普通窗体
    frmMDI为MDI窗体
    strTest为TFrmMDI的public变量
    单击frmMain上的btn1,判断实例MDI_1是否存在,不存在则创建一个frmMDI实例MDI_1,并赋值strTest,显示strTest
    点击frmMain上的btn2,判断实例MDI_2是否存在,不存在则创建一个frmMDI实例MDI_2,并赋值strTest,显示strTestunit uMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TfrmMain = class(TForm)
        btn1: TButton;
        btn2: TButton;
        procedure btn2Click(Sender: TObject);
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;implementationuses
      uMDI;{$R *.dfm}procedure TfrmMain.btn1Click(Sender: TObject);
    var
      nForm:TFrmMDI;
      strFormName:string;
    begin
      strFormName:='MDI_1';
      nForm:=TfrmMDI(FindGlobalComponent(strFormName));
      if nForm=nil then
      begin
        nForm:=TfrmMDI.Create(self);
        nForm.Name:=strFormName;
      end;
      nForm.strTest:='my name is '+strFormName;
      nForm.Caption:=nForm.strTest;
      nForm.Show;
    end;procedure TfrmMain.btn2Click(Sender: TObject);
    var
      nForm:TfrmMDI;
      strFormName:string;
    begin
      strFormName:='MDI_2';
      nForm:=TfrmMDI(FindGlobalComponent(strFormName));
      if nForm=nil then
      begin
        nForm:=TfrmMDI.Create(self);
        nForm.Name:=strFormName;
      end;
      nForm.strTest:='my name is '+strFormName;
      nForm.Caption:=nForm.strTest;
      nForm.Show;
    end;end.
    unit uMDI;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TfrmMDI = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
        strTest:string;
      end;var
      frmMDI: TfrmMDI;implementation{$R *.dfm}end.
      

  4.   


    大大,还有一个问题。
    就是关于self的用法。比如在窗体函数,或者过程中可以使用self.strTest;但是如果我在非窗体函数中用什么替代呢。感激!
      

  5.   

    非窗体函数中用  窗体实例名.strTest