首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

两种窗口建立有什么差别呢?为什么会出现异常指针

2012-02-28 
两种窗口建立有什么差别呢?为什么会出现错误指针?我在fsMDIChild窗口fm_GY中调用fsMDIChild窗口fm_GYCXC/C

两种窗口建立有什么差别呢?为什么会出现错误指针?
我在fsMDIChild窗口fm_GY中调用fsMDIChild窗口fm_GYCX

C/C++ code
void __fastcall Tfm_GY::BT_SearClick(TObject *Sender){  if(fm_GYCX == NULL)     Application->CreateForm(__classid(Tfm_GYCX), &fm_GYCX);//    fm_GYCX = new Tfm_GYCX(this);  // 这样和上面这样建立窗口有什么差别呢?为什么用这句不行?会出现错误指针?  fm_GYCX->Show();  fm_GY->Close();}void __fastcall Tfm_GY::FormClose(TObject *Sender, TCloseAction &Action){  Action=caFree;  fm_GY=NULL;}//---------------------------------------void __fastcall Tfm_GYCX::FormClose(TObject *Sender, TCloseAction &Action){  Action=caFree;  fm_GYCX=NULL;}//---------------------------------------


请解释一下用CreateForm和用NEW有何差别?为什么用NEW建立在关闭窗口后会出现错误指针?而用CreateForm却不会呢?

[解决办法]
void __fastcall Tfm_GY::BT_SearClick(TObject *Sender)
{
if(fm_GYCX == NULL)
Application->CreateForm(__classid(Tfm_GYCX), &fm_GYCX);
// fm_GYCX = new Tfm_GYCX(this); // 这样和上面这样建立窗口有什么差别呢?为什么用这句不行?会出现错误指针?
fm_GYCX->Show();
fm_GY->Close();
}

这里代码有问题
[解决办法]
Application->CreateForm和New 出来的窗体实际上没有什么区别
一个是VCL的方法
另一个是C++的方法
[解决办法]
MDI风格的用
C/C++ code
if (fm_GYCX== NULL)   fm_GYCX= new Tfm_GYCX(this);fm_GYCX->Show();
[解决办法]
两种方法都没有错
检查你自己的代码 看看别的哪个地方出问题了
[解决办法]
C/C++ code
//---------------------------------------#include <vcl.h>#pragma hdrstop#include "Unit1.h"#include "Unit2.h"#include "Unit3.h"//---------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner){}//---------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){    Application->CreateForm(__classid(TForm2), &Form2);    Form2->Show();}//---------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){     Form3 = new TForm3(this);     Form3->Show();}//--------------------------------------- 

热点排行