首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDI应用程序-无法打开子窗体

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

Stack Overflow用户
提问于 2014-06-03 13:27:38
回答 1查看 377关注 0票数 0

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

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

当我想调用我的ChildForm时,请使用以下代码

代码语言:javascript
复制
  void __fastcall TMainForm::ChildForm1Click(TObject *Sender)
    {
      if(!ChildForm)
       { ChildForm =  new TChildForm(this); }
      else
       { ChildForm->WindowState=wsNormal; }
    }

并关闭

代码语言:javascript
复制
void __fastcall TChildForm::FormClose(TObject *Sender,
  TCloseAction &Action)
 {
    Action=caFree;
 }

为什么当我打开ChildForm的时候我就关闭了。什么时候再打开。ChildForm不能打开??

主要形式

代码语言:javascript
复制
#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; }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 10:55:55

正如注释中讨论的那样,在@Remy的帮助下,在TMainForm类中,您需要在销毁它所指向的表单之后将ChildFrom指针设置为NULL。这可以在TChildForm类的析构函数中完成,方法是使用在构造时传递给它的所有者的指针。

问题主要在代码片段中:

代码语言:javascript
复制
  if(!ChildForm)
   { ChildForm =  new TChildForm(this); }
  else
   { ChildForm->WindowState=wsNormal; }

第一次,一切都按计划进行。但是,当ChildForm被销毁时,指针不会被重置,下次请求创建ChildForm时,第一个测试就会失败,当然也不会创建表单。

所以:

  • 使TChildForm类保留其所有者指针的副本(您可能需要将构造函数原型更改为: __fastcall儿童表格::TMainForm*owner 为了让TChildForm知道它的所有者的完整类型( #include应该为您提供TMainForm头,或者请求许可)。
  • TMainForm中创建一个方法来处理TChildForm指针重置,并为TChildForm调用它提供正确的访问级别。
  • 添加对该方法的调用(即。( owner->onChildFormTermination()或类似的东西)在~TChildForm中让它的所有者知道。

请注意,我的VCL有点生疏(我已经多年没有用C++Builder编写代码了),可能有一种更惯用的编写方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24016452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档