如何能关闭窗体

gfh_79_0 2006-03-20 11:15:46
有FORM1和FORM2 两个窗体,FORM1为主窗体,FORM2的类型为fsStayOnTop
FORM1有定时器,执行关闭FORM2的代码。

当FORM1最小化后,若干秒后定时器执行了关闭FORM2的代码。
FORM1恢复后发现FORM2并不被关闭,且标题栏上的关闭按钮也失效。

那位能够帮助解决,为什么会这样呢?
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CityHost 2006-03-21
  • 打赏
  • 举报
回复
大家说的这么清楚了,我就不讲了
gfh_79_0 2006-03-21
  • 打赏
  • 举报
回复
谢各位。
NEW的这种方法我知道,但我的程序都做完了改起来有些麻烦。

为什么不用HIDE呢?
我想知道,
为什么Hide()就不可以?
如果FORM2不是fsNormal就没问题。
lurel 2006-03-21
  • 打赏
  • 举报
回复
不用搞那么复杂,只要把Form2声明成Form1的一个成员,然后在Create的时候创建,以后就随便控制,怎么玩都行了.
Jim@luckeeinc.com 2006-03-21
  • 打赏
  • 举报
回复
一般不要用Hide();
如果以后再用,那就再new一个出来好了,只要不忘记释放就行了。
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Application->FindComponent("Form2") == NULL)
{
TForm2 *f = new TForm2(Application);
f->Show();
}
else
Form2->Show();

Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Application->FindComponent("Form2") != NULL)
{
Form2->Close();
Timer1->Enabled = false;
}
}
//---------------------------------------------------------------------------
gfh_79_0 2006-03-21
  • 打赏
  • 举报
回复
是可以的。
不过我以后还想用这个FORM,
所以我想用Form2->Hide();
但这样就又存在我说的情况了。

还有为什么会有这种情况?

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form2->Hide();
Timer1->Enabled=false;
}
zyyoung 2006-03-21
  • 打赏
  • 举报
回复
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Application->FindComponent("Form2"))
Form2->Close();
}
//---------------------------------------------------------------------------

另外在Form 2 中的onclose里记得写Action = caFree;


/////////////////////////////////////////////////////
使用楼上的这个人写的代码,测试一下.
应该可以
BenLeak 2006-03-21
  • 打赏
  • 举报
回复
不理解楼主的意思和代码结构
Jim@luckeeinc.com 2006-03-20
  • 打赏
  • 举报
回复
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Application->FindComponent("Form2"))
Form2->Close();
}
//---------------------------------------------------------------------------

另外在Form 2 中的onclose里记得写Action = caFree;
gfh_79_0 2006-03-20
  • 打赏
  • 举报
回复
to:lurel(城市陌生人)
form2是show出来的

代码如下:
FORM2无,Form2->FormStyle为fsNormal编译前设置
FORM1:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form2->Close();
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Form2->Show();
Timer1->Enabled=true;

}
constantine 2006-03-20
  • 打赏
  • 举报
回复
你做类似msn对话框那样的东西?

把定时器放到form2看看

还有贴出你的代码。
lurel 2006-03-20
  • 打赏
  • 举报
回复
form2是showModale出来的吗?
yz20050510 2006-03-20
  • 打赏
  • 举报
回复
关注中!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧