同一mdi子窗体没关闭,多次打开,每次窗体的名称不同
如第一次打开为Form1,没有关闭再打开,名称就变成Form1_1了,各位编程时怎样动态获取form的名称?
不能限制每个窗体只能打开一次。也不能在打开前关闭打开过的窗体

解决方案 »

  1.   

    我已前也碰到,这样太可以解决
    procedure TFrm_OtherInList.FormDestroy(Sender: TObject);
    begin
    Frm_OtherInList:=nil;
    end;退出时释放窗体就可以
      

  2.   

    正常打开 得激活上次已经打开的 不能再重复打开吧
    激活上次打开代码如下:
    function TfrmMain.MDIExist(frmName: string): Boolean;
    var
      i: Integer;
    begin
      Result := False;
      for i := 0 to MDIChildCount - 1 do
      begin
        if MDIChildren[i].Name = frmName then
        begin
          Result := True;
          MDIChildren[i].BringToFront;
          Break;
        end
      end;
    end;
    如果lz意思是要打开复制一个的话 那就按照ls意思 差不多了。
      

  3.   

    我也问个问题mdi最小化了就隐藏了怎么办呀
      

  4.   


     if  not MDIExist('frm_SellPreList') then
    begin
    application.CreateForm(Tfrm_SellPreList,frm_SellPreList);
    frm_SellPreList.Show;
    end这个对吗,好像不对
      

  5.   

    看来是没办法了吗?我是想打开了,不能关闭,然后再打开同一个啊,就是可以打开两个或者多个同样form的,怎样获取form名称
      

  6.   

    procedure RunDc(App: TApplication);
    begin
      if not Assigned(frmPatDc) then
      begin
        Application := App;
        frmPatDc := TfrmPatDc.Create(app.MainForm);
        frmPatDc.frmHandle :=frmPatDc.Handle;
        frmPatDc.Show;
      end
      else
      begin
        ShowWindow(frmPatDc.frmHandle, SW_SHOWDEFAULT);
        frmPatDc.BringToFront;
      end;
    end;
      

  7.   

    主窗:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      Tmain = class(TForm)
        Button1: TButton;
        Timer1: TTimer;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        qu_formindex: integer;
      end;var
      main: Tmain;   //主窗implementation  {$R *.dfm}
    uses unit2;//Form2的单元
    var Frm:array[0..9]of TForm1;//定义10个(当然可以根据需要定义更多)TForm1
        FormIndex:integer;procedure Tmain.Button1Click(Sender: TObject);
    begin
      if FormIndex >9 then begin
        showmessage('定义的10个窗体已经建立,不能再建立了。');
        exit;
      end;
      Frm[FormIndex]:=TForm1.Create(self);//这样建立的TForm1,可以通过变量Frm[FormIndex]来访问
      Frm[FormIndex].FormIndex:=FormIndex;//每个 TForm1 实例的索引
      Frm[FormIndex].Caption:='第 '+inttostr(FormIndex)+' 个窗体';//给新窗体赋值窗眉文本
      Frm[FormIndex].Show;//显示刚建立的窗体
      inc(FormIndex);
    end;procedure Tmain.FormCreate(Sender: TObject);
    begin
      Timer1.Enabled:=false;
      Timer1.Interval:=100;
    end;procedure Tmain.Timer1Timer(Sender: TObject);
    begin
      Timer1.Enabled:=false;
      FreeAndNil(Frm[qu_formindex]);//释放刚刚关闭的动态窗体
    end;procedure Tmain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    var i:integer;
    begin
      for i:= 0 to 9 do
        if Frm[i]<>nil then FreeAndNil(Frm[i]);//主窗关闭前释放未释放的动态窗
    end;procedure Tmain.Button2Click(Sender: TObject);
    begin
      if Frm[3]<>nil then begin
        Frm[3].Show;//如果窗体 Frm[3] 已经存在,让它显示
        Frm[3].SetFocus;//将焦点放在 Frm[3]
      end;
    end;end.子窗:unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
        FormIndex: integer;//每个 TForm1 实例的索引
      end;var
      Form1: TForm1; //子窗implementation {$R *.dfm}
    uses unit1; // main 窗所在单元procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      main.qu_formindex:=FormIndex;//将自己的索引值传回主窗
      main.Timer1.Enabled:=true;//打开主窗的定时器(让定时器来释放本窗体)
    end;end.
      

  8.   

    主窗单元中:......
    implementation  {$R *.dfm}
    uses unit2;//Form1的单元 (此处原来的注释误为 Form2 了)......