C++Builder 窗体 不稳定的问题
[解决办法]
你这个代码里,感觉到处都有画蛇添脚的影子。
首先,你可以有效利用Form的ModalResult属性。
其次,Form的OnCreate事件中调用Invalidate,是没有什么意义的。
再有,既然你的Form是模态显示,用智能指针就没什么优势了。ShowModal以后,将Form上Edit的中的字符串接收回来,直接delete掉这个Form对象就行了。
[解决办法]
晚一些我给你发一段改过的代码。
[解决办法]
.h 文件
//---------------------------------------------------------------------------
#ifndef TEDIT_OK_CANCELH
#define TEDIT_OK_CANCELH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TEDIT_OK_CANCEL: public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TEdit *Edit1;
TButton *Button2;
void __fastcall OK(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Cancel(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TEDIT_OK_CANCEL(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TEDIT_OK_CANCEL *EDIT_OK_CANCEL;
//---------------------------------------------------------------------------
int __fastcall OpenTestWindow(AnsiString &EditText,
AnsiString Caption, TRect pos);
#endif
//---------------------------------------------------------------------------
#include <memory>
#include <vcl.h>
#pragma hdrstop
#include "TEDIT_OK_CANCEL.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TEDIT_OK_CANCEL *EDIT_OK_CANCEL;
//---------------------------------------------------------------------------
__fastcall TEDIT_OK_CANCEL::TEDIT_OK_CANCEL(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TEDIT_OK_CANCEL::OK(TObject *Sender)
{
ModalResult = mr_Ok;
}
//---------------------------------------------------------------------------
void __fastcall TEDIT_OK_CANCEL::Cancel(TObject *Sender)
{
ModalResult = mr_Cancel;
}
//---------------------------------------------------------------------------
void __fastcall TEDIT_OK_CANCEL::FormClose(TObject *Sender,
TCloseAction &Action)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TEDIT_OK_CANCEL::FormResize(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TEDIT_OK_CANCEL::FormCreate(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
int __fastcall OpenTestWindow( AnsiString &EditText,
AnsiString Caption, TRect pos )
{
TEDIT_OK_CANCEL *p = new TEDIT_OK_CANCEL(NULL);
p->Caption = Caption;
p->Edit1->Text = EditText;
int nModalResult = p->ShowModal();
EditText = nModalResult == mr_Ok? p->Edit1->Text: String("");
return nModalResult;
}
//---------------------------------------------------------------------------