C++Builder 程序员博客
30 Jul
按钮如何打开另外一个窗体同时关掉本窗体??
谢谢
这问题很菜对吧!
xxx->Show();
Close();
如果本窗体是主窗体,就不行了
那只能
***->Show();
this->Hide();
哦,搞错了,不能是this,应该是form名
哈哈 谢谢
这个论坛看来不错啊
我以后常来!
这问题看上去很菜,其实不菜的。
几乎所有的菜鸟都碰到过(呵呵,我也想过)。
1、如果是非主窗体起动另一窗体后自个关闭,这个很容易,直接写代码1->Show();2->Close();
2、至于主窗体,那是不能关闭的,只能是Hide(),也就是藏起来。如果你实在要关了主窗,那就不是关的概念了,那是主进程替换,这玩意儿难度就大了,记得查过相关资料,但本人没搞出个所以然来,你如果有兴趣可以去查查看,似乎很难的。
应该不存在"主进程替换"的概念吧,不好意思,我还是第一次听到这个词
这只是一个消息循环的问题,BCB的main函数WinMain中没有消息循环,其消息循环函数在TApplication类中,而TApplication又把消息循环的控制权交给了Application中第一个CreateForm的TForm对象,当这个TForm关闭后,Application中的消息循环就结束了,程序自然就退出了,而其它的Form,因为考虑到资源重用,在调用Close()时其实窗口并未Destroy,只是简单的Hide了,如果你要关掉Main TForm再打开其它Form,那就只能用Hide()了
各位老大理解复杂了吧?"按钮如何打开另外一个窗体同时关掉本窗体??"是什么意思?是打开自身的"窗体"还是打开外部的程序?
要是打开外部的程序是很简单:
ShellExecute(Handle, "Open","文件名", NULL, NULL, SW_SHOW);//打开外部程序
PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NULL);//关闭当前窗口.
要是前后打开的是一个程序的不同窗体,那很麻烦的,需要调用拷贝自身然后用复制品把自己消灭掉,具体程序在老妖的站里面有详细的介绍.
大家想的都复杂了哦
程序启动时把主Form隐藏,在关闭这个窗体时打开隐藏窗体就可以了….
直接写代码1-> Show();2-> Close();
我想LZ可能是在设计一个类似密码权限的窗口,密码通过后密码界面关闭,将被操作的窗口显示。
如果这样的话密码窗体就可能是modal形式,那关闭可能会麻烦点。
1.密码窗体“确定”键的ModalResult==mrOk,“取消”键的ModalResult==mrCancel
2.void __fastcall T密码窗体::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(ModalResult==mrOk && EditKey->Text!="123456")
{
Application->MessageBoxA("密码输入错误,请重新输入","提示",64);
EditKey->Text="";
CanClose=false;
}
}
3.void __fastcall TMainForm::ShowClick(TObject *Sender)
{
if (T密码窗体->ShowModal()==mrOk)
{
T即将操作窗体->ShowModal();
}
}
该回复于2008-07-19 16:14:36被版主删除
学习中。。。。。。学习中。。。。。。
如果消息机制不会的话 用控件完全可以实现 BCB的控件是独步天下的
xxx->Show();
Close();//关闭
xxx->Show();
Hide();//隐藏
顶
如果消息机制不会的话 用控件完全可以实现 BCB的控件是独步天下的
//关闭所有子窗体
nCount=this->MDIChildCount;
i=0;
while(i <nCount){
this->MDIChildren[i]->Close();
i++;
}
我想LZ的问题没有这么复杂吧,也想不到有这么复杂的解决办法,学习ING……
收藏学习