怎样判断指定子窗体是否已经创建?(100分)

  • 主题发起人 主题发起人 三岁
  • 开始时间 开始时间

三岁

Unregistered / Unconfirmed
GUEST, unregistred user!
情况是这样:
用application.CreateForm()方法创建一个mdi类的子窗体
然后再用setwindowpos();显示
因为所创的窗体是原先做好的,每个子窗体是不同的.
这样每次创建时,就应判断这个子窗体是否已经建立,
如果存在就不用创建了,所以应该怎样判断该子窗体是否已经创建?
 
假如你的mdi子窗体名称为frmMDIChild,
则你在if assigned(frmMDIChild)then
setwindowpos();
应该就可以了
 
procedure OpenForm(FormClass: TFormClass;
var Form;
AOwner: TComponent);
var
I: Integer;
Child: TForm;
begin
for I := 0 to Screen.FormCount -1do
if Screen.Forms.ClassType = FormClass then
begin
Child := Screen.Forms;
if Child.WindowState = wsMinimized then
ShowWindow(Child.handle, SW_SHOWNORMAL) else
ShowWindow(Child.handle, SW_SHOWNA);
if (not Child.Visible) then
Child.Visible := True;
Child.BringToFront;
Child.Setfocus;
TForm(Form) := Child;
Exit;
end;
Child := TForm(FormClass.NewInstance);
TForm(Form) := Child;
Child.Create(AOwner);
end;
 
简单的方法是定义一个boolean变量,创建子窗口是是其等于True,释放窗口时使其等于false;
这个方法又方便又安全,不过没上面的哥们那么专业呵呵!
 
可以简单的用如下代码:
if Form1<>Nil then
begin
Form1:=TForm1.Create(application);
Form1.Show;
end
注意:Form1.Free以后,Form1<>Nil仍然为‘真’ 所以应有如下代码:
procedure TForm1.FormDestroy(Sender:TObject);
begin
Form1=Nil;
end;

后来发现:机械工业出版社的《DELPHI 5开发人员指南》P86页也是这么叙述的!
 
先谢了,待我用了再给分吧
 
用的怎么样了??有问题 就问啊??
 
谢谢各位了。。。我已经解决了。这就给分。
 

Similar threads

后退
顶部