如何检查子窗口是否存在?

WeG*_*ars 6 delphi

我有一个主窗体(MainForm)和一个MDI子窗口(TFormChild).我想创建多个TFormChild表单,但第一个必须以某种方式运行,所以我需要检测TFormChild窗口是否已经存在.

我使用此代码,但它无法正常工作:

function FindChildWindowByClass(CONST aParent: HWnd; CONST aClass: string): THandle;   
begin
  Result:= FindWindowEx(aParent, 0, PChar(aClass), NIL);
end;
Run Code Online (Sandbox Code Playgroud)

我称之为:

Found:= FindChildWindowByClass(MainForm.Handle, 'TFormChild')> 0;   
Run Code Online (Sandbox Code Playgroud)

小智 13

在表单中,您可以引用MDIChildCount和MDIChildren属性.

例如 :

var
  i: integer;
begin
  for i:= 0 to MainForm.MDIChildCount-1 do
  begin
    if MainForm.MDIChildren[i] is TFormChild  then
    ...
  end;
  ...
end;
Run Code Online (Sandbox Code Playgroud)


Ser*_*yuz 7

称之为

Found:= FindChildWindowByClass(MainForm.ClientHandle, 'TFormChild')> 0;  
Run Code Online (Sandbox Code Playgroud)

MDI子窗口是'MDICLIENT'的子项,ClientHandleTCustomFrom的属性保存句柄.

  • @Altar - 你问了一个明确的问题,这个和Hasan的答案都提供了解决方案.您可以接受更多的诉讼.我对你在这个答案上投下的票数很好.:) (2认同)