读书人

同一mdi子窗体没封锁,多次打开每次窗

发布时间: 2012-09-29 10:30:01 作者: rapoo

同一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最小化了就隐藏了怎么办呀
[解决办法]

探讨
正常打开 得激活上次已经打开的 不能再重复打开吧
激活上次打开代码如下:
function TfrmMain.MDIExist(frmName: string): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to MDIChildCount - 1 do
begin
if MDIChil……

[解决办法]
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;
[解决办法]
主窗:
Delphi(Pascal) code
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. 

读书人网 >.NET

热点推荐