MDI应用程序-无法打开子窗体

乔尼

我做了2个表格。MainForm和ChildForm(我设置为可用的表单)

设计>> http://i.imgur.com/UkV7lZh.png

当我想调用ChildForm时使用此代码

  void __fastcall TMainForm::ChildForm1Click(TObject *Sender)
    {
      if(!ChildForm)
       { ChildForm =  new TChildForm(this); }
      else
       { ChildForm->WindowState=wsNormal; }
    }

并关闭

void __fastcall TChildForm::FormClose(TObject *Sender,
  TCloseAction &Action)
 {
    Action=caFree;
 }

为什么当我打开ChildForm然后关闭。以及什么时候再打开。ChildForm无法打开?

主要形式

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h" //ChildForm
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ChildForm1Click(TObject *Sender)
{
 if(!ChildForm)
{ ChildForm =  new TChildForm(this); }
else
{ ChildForm->WindowState=wsNormal; }
}
Didierc

因为它已经在的意见,并感谢@Remy勒博的帮助下进行了讨论,在TMainForm班级,需要设定ChildFrom指针NULL后,摧毁了它指向的形式。这可以在TChildForm的析构函数中完成,方法是使用构造时已传递给它的所有者的指针。

问题基本上在该代码段中:

  if(!ChildForm)
   { ChildForm =  new TChildForm(this); }
  else
   { ChildForm->WindowState=wsNormal; }

第一次,一切都按计划进行。ChildForm但是,如果销毁了该指针,则不会重置该指针,并且下次ChildForm请求创建时,第一次测试将失败,并且当然不会创建该表单。

所以:

  • 使TChildForm类保留其所有者指针的副本(您可能需要将构造函数原型更改为以下内容:

    __fastcall TChildForm::TChildForm(TMainForm *owner)
    

    为了TChildForm了解完整的类型及其所有者(IDE应#includeTMainForm头给你,或要求做的权限)。

  • 在中创建一个方法TMainForm来处理TChildForm指针重置,并为其赋予正确的访问级别TChildForm以调用它。

  • 添加对该方法(即owner->onChildFormTermination()类似方法)的调用,以告知~TChildForm其所有者。

请注意,我的VCL-fu有点生锈(我已经有10多年没有使用C ++ Builder进行编码了),也许有一种更惯用的书写方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MDI子窗体在新打开时关闭

来自分类Dev

MDI子窗体在新打开时关闭

来自分类Dev

如何在 Windows 窗体 MDI 应用程序中跟踪全局变量?

来自分类Dev

无法在Windows桌面窗体.NET Core应用程序中打开窗体[设计]视图

来自分类Dev

在MFC MDI应用程序中仅允许打开一个CDocument

来自分类Dev

如何从MDI Visual C ++ 2008应用程序更改子窗口的背景

来自分类Dev

在C ++ Windows窗体应用程序中打开新窗体

来自分类Dev

无法打开应用程序“ Eclipse”。-10810

来自分类Dev

Mac:无法打开应用程序“%@”

来自分类Dev

VS Code应用程序无法打开

来自分类Dev

应用程序无法在牛轧糖中打开

来自分类Dev

ClickOnce 应用程序无法打开

来自分类Dev

应用程序配置Windows窗体应用程序

来自分类Dev

在 Visual Studio 中获取 Windows 窗体应用程序项目以从窗体运行,而不必打开 Visual Studio?

来自分类Dev

从网页打开应用程序

来自分类Dev

MDI应用程序中的BackgroundWorker

来自分类Dev

在MDI应用程序中引用属性

来自分类Dev

MDI应用程序中的BackgroundWorker

来自分类Dev

Windows 窗体应用程序设置为 MdiContainer,子窗体在加载时更改显示

来自分类Dev

Windows 安装程序 (NSIS) 生成应用程序后无法打开应用程序

来自分类Dev

MDI子窗体的大小控制

来自分类Dev

从Facebook应用程序打开我的应用程序

来自分类Dev

应用程序索引“在应用程序中打开”无效

来自分类Dev

如何从ios应用程序打开VK应用程序

来自分类Dev

在应用程序中打开应用程序

来自分类Dev

通过我的应用程序打开 Instagram 应用程序

来自分类Dev

无法启动任何应用程序-无法打开与X的连接

来自分类Dev

无法联系服务器,应用程序无法打开

来自分类Dev

无法启动应用程序

Related 相关文章

  1. 1

    MDI子窗体在新打开时关闭

  2. 2

    MDI子窗体在新打开时关闭

  3. 3

    如何在 Windows 窗体 MDI 应用程序中跟踪全局变量?

  4. 4

    无法在Windows桌面窗体.NET Core应用程序中打开窗体[设计]视图

  5. 5

    在MFC MDI应用程序中仅允许打开一个CDocument

  6. 6

    如何从MDI Visual C ++ 2008应用程序更改子窗口的背景

  7. 7

    在C ++ Windows窗体应用程序中打开新窗体

  8. 8

    无法打开应用程序“ Eclipse”。-10810

  9. 9

    Mac:无法打开应用程序“%@”

  10. 10

    VS Code应用程序无法打开

  11. 11

    应用程序无法在牛轧糖中打开

  12. 12

    ClickOnce 应用程序无法打开

  13. 13

    应用程序配置Windows窗体应用程序

  14. 14

    在 Visual Studio 中获取 Windows 窗体应用程序项目以从窗体运行,而不必打开 Visual Studio?

  15. 15

    从网页打开应用程序

  16. 16

    MDI应用程序中的BackgroundWorker

  17. 17

    在MDI应用程序中引用属性

  18. 18

    MDI应用程序中的BackgroundWorker

  19. 19

    Windows 窗体应用程序设置为 MdiContainer,子窗体在加载时更改显示

  20. 20

    Windows 安装程序 (NSIS) 生成应用程序后无法打开应用程序

  21. 21

    MDI子窗体的大小控制

  22. 22

    从Facebook应用程序打开我的应用程序

  23. 23

    应用程序索引“在应用程序中打开”无效

  24. 24

    如何从ios应用程序打开VK应用程序

  25. 25

    在应用程序中打开应用程序

  26. 26

    通过我的应用程序打开 Instagram 应用程序

  27. 27

    无法启动任何应用程序-无法打开与X的连接

  28. 28

    无法联系服务器,应用程序无法打开

  29. 29

    无法启动应用程序

热门标签

归档