同一mdi子窗体没关闭,多次打开,每次窗体的名称不同
同一mdi子窗体没关闭,多次打开,每次窗体的名称不同
如第一次打开为Form1,没有关闭再打开,名称就变成Form1_1了,各位编程时怎样动态获取form的名称?
不能限制每个窗体只能打开一次。也不能在打开前关闭打开过的窗体
[解决办法]
我已前也碰到,这样太可以解决
procedure TFrm_OtherInList.FormDestroy(Sender: TObject);
begin
Frm_OtherInList:=nil;
end;
退出时释放窗体就可以
[解决办法]
正常打开 得激活上次已经打开的 不能再重复打开吧
激活上次打开代码如下:
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意思 差不多了。
[解决办法]
打开前,先判断此窗体是否已经打开了
像楼上的就行了
[解决办法]
我也问个问题mdi最小化了就隐藏了怎么办呀
[解决办法]
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.