【问题标题】:TScreen->Forms Shows Unexpected Extra FormsTScreen->Forms 显示意外的额外表单
【发布时间】:2023-03-28 15:22:01
【问题描述】:

我正在使用 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(j=0; j<Screen->CustomFormCount; j++){
  MyName    = Screen->CustomForms[j]->Name;
  MyCaption = Screen->CustomForms[j]->Caption;
}

【问题讨论】:

标签: delphi c++builder


【解决方案1】:

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

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

【讨论】:

  • 当我看的时候,Screen->CustomForms[j]->ClassName();它显示“TNoActiveForm”。属性 Screen->CustomFormCount 包括其中几个虚拟表单。我只需要确保检查表单类型并跳过这些未知表单。
  • 你可能应该想想这些表格是从哪里来的。
  • 最有可能的是,您的项目中的某些组件会出于任何需要创建自己的内部 TForm 对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多