TScreen->表单显示意外的额外表单

hom*_*ase 2 delphi c++builder

我正在使用 C++Builder 10.3 Rio 和 VCL Windows 应用程序。我正在使用 TScreen->Forms 来获取有关我的程序打开表单的信息。这显示 FormCount 比我预期的要高。我的应用程序有两个打开的窗体(1)主程序窗体和(2)数据输入对话框。当我检查 Screen->FormCount 时,它显示 6 个表单。当我检查下面的 for 循环中的表单名称和标题时,只有我的 2 个表单有名称和标题。其他表单名称和标题均为 NULL。我可以使用dynamic_cast或表单名称来识别我的表单。还有哪些额外的形式?我如何识别其他表格?

UnicodeString MyName, MyCaption;

for(int j=0; j<Screen->FormCount; j++){
  MyName    = Screen->Forms[j]->Name;
  MyCaption = Screen->Forms[j]->Caption;
  TMyForm *MyLocal = dynamic_cast<TMyForm *>( Screen->Forms[j] );
}

for(int j=0; j<Screen->CustomFormCount; j++){
  MyName    = Screen->CustomForms[j]->Name;
  MyCaption = Screen->CustomForms[j]->Caption;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

您可以使用该ClassName属性来了解更多信息。

但是,例如,如果某些形式很简单TForm,或者您不认识该名称,那么这可能不会显示任何有用的信息。要真正弄清楚这些形式是什么,请设置一个断点TCustomForm.Create,并在每次触发该断点时检查调用堆栈。

  • 最有可能的是,您的项目中的某些组件出于任何需要的原因创建了自己的内部 TForm 对象 (2认同)