导航
  • 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

请问两个showmodal出来的窗口,焦点如何控制?

huche 2004-03-22 09:32:11
用BCB写的程序,如果我同时ShowModal了两个以上的窗口,经常会出现焦点跑到了后面一个窗口,而不是最上面的窗口,而这时只能操作最上面的窗口,这就导致矛盾,所以界面无法操作。
这时候只能通过切换到别的应用程序,再切换回这个应用程序,那个获得焦点的窗口就回到最上面了。
但是用VC写的程序就不会有这个问题,请问这个BCB的问题该如何解决啊?
...全文
136 点赞 收藏 23
写回复
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samme 2004-07-13
你可以在这两个FORM中的OnClose事件中写上Action=caFree;
在OnDeactivate事件中写上Close();
这样在你ShowModal第二个FORM时,第一个被ShowModal的FORM就会自动关闭
回复
jevin8011 2004-07-13
同时ShowModal了两个以上的窗口
??
回复
kmfangxun 2004-07-13
楼主试试这样:

 在设计时将Form2的FormStyle设为fsStayOnTop;
 或者在Form2的构造函数里设置.

 还可以在Form2的OnShow事件里加入:Form2->BringToFront();

 我以前也碰到过你说的情况,这样做后就解决了.
回复
linqier 2004-07-12
关注,
我遇到的问题也是,能同时显示两个Form1,谁知道怎么解决呀。
回复
constantine 2004-07-12
用多线程吧,没有听过!你给我的感觉就是程序很奇怪,要别人超作一个就够了
回复
yuwenshen 2004-07-12
你试一试这样呢
TForm1 *form1 = new TForm1(this);
form1->ShowModal();
delete form1;

 在form1还没有关闭时,在某个事件中又运行了如下代码:
TForm2 *form2 = new TForm2(this);
form2->ShowModal();
delete form2;
回复
yuwenshen 2004-07-12
不会吧,我写的代码与你的情况一样啊,没有你说的样子啊?
可以说的详细一点吗?
回复
xjp6688 2004-07-12
ShowMdoal();

Show();
有什么区别呀?
回复
EraserPeople 2004-07-12
是多线程吧?
回复
robbyzi 2004-07-12
在主窗口中运行了如下代码:
TForm1 *form1 = new TForm1(MainForm);
form1->ShowModal();
delete form1;

 在form1还没有关闭时,在某个事件中又运行了如下代码:
TForm2 *form2 = new TForm2(MainForm);
form2->ShowModal();
delete form2;

//------------------------------------------



你举的例子辑逻上已经是错误的了。
你说的在某个事件上又把Form2来ShowModal,但是这时Form1已经处于ShowModal状态。
MainForm根本就不会响应任何操作事件,那么Form2怎么可以ShowModal呢?还是这时已经将
Form1已经关闭了?



回复
kmfangxun 2004-07-12
搂主:

那您就关闭Form2,不就可以操作Form1了。
回复
EraserPeople 2004-07-12
TForm2 *form2 = new TForm2(MainForm);
把FormStyle改成fsStayOnTop
form2->ShowModal();
delete form2;
这样试试
回复
huche 2004-04-20
举个例子吧:
 在主窗口中运行了如下代码:
TForm1 *form1 = new TForm1(MainForm);
form1->ShowModal();
delete form1;

 在form1还没有关闭时,在某个事件中又运行了如下代码:
TForm2 *form2 = new TForm2(MainForm);
form2->ShowModal();
delete form2;

这时form2应该在form1上面吧,焦点也在form2上面。

 但是经常会在程序运行过程中form1把form2给遮住了,但焦点却还在form2上,这时根本无法操作程序界面。只能通过切换到别的应用程序,再切换回这个应用程序,form2就回到最上面了。

你们没有遇到这种情况么?
回复
int64 2004-03-23
是不是能够改为show然后将show后的代码写入show出窗体的关闭事件中?

是个好办法
回复
tccsdn 2004-03-23
我也不知道你是怎么能同时SHOWMODAL 两个窗口的啊?????????
回复
thp 2004-03-22
可以控制窗体的初始位置,不要让两个窗体重叠在一起不就可以了。
回复
痞子酷 2004-03-22
ShowModal
该为Show()
回复
netsys2 2004-03-22
试试

Form2->SetFocus();
回复
jiangchun_xn 2004-03-22
如果我同时ShowModal了两个以上的窗口
---------------------------------
你是怎么同时的?线程?
回复
fjye 2004-03-22
先把FormStyle改成fsStayOnTop
然后改成visible为true
回复
发动态
发帖子
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
社区公告
暂无公告