您的位置:程序门 -> vb ->



如果做一个没有焦点操作过程提示窗口


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如果做一个没有焦点操作过程提示窗口[已结贴,结贴人:cyy201]
发表于:2007-10-27 09:07:39 楼主
我想给程序加上一个操作过程的提示窗口,我的主窗口是mdiform,用于显示提示的窗口的mdichild=false、borderstyle=0,然后用setparent把提示窗口抓入mdiform里,但发现这样做会出现窗口焦点的转移。如果不用setparent,在操作过程较长时提示窗口会出现标题栏,请问有什么办法可实现既能在mdiform里显示,而且有不会抢焦点的窗口。
发表于:2007-10-27 19:51:311楼 得分:0
顶上
发表于:2007-10-29 09:30:492楼 得分:0
你用   setparent   是不是仅仅希望提示窗体显示在   mdiform   前?可以这样:
        form2.show   vbmodeless,   mdiform1   '提示窗体显示在   mdiform1   前
        mdiform1.setfocus   '焦点返回到   mdiform   上
发表于:2007-10-29 10:08:023楼 得分:0
form2.show   ,   mdiform1第一个参数可以省略
再让主窗体得到焦点,但这行代码可能会出错,不知道为什么.

另外的方法是,自制一个消息提示窗体,
象系统自动更新时,下载完提示出来:更新下载完成是否安装的那个.    
发表于:2007-10-29 10:24:514楼 得分:0
to   tiger_zhao

 是的,这只是一个等待提示而已,所以只要显示就可以了,但当前窗口上后续语句应能继续执行。

 直接用form2.show,在操作过程比较长时form2上面会出现标题栏(borderstyle=0标题栏不应出现阿)

 如果加上vbmodeless,那后面所有的语句都被停止

 感觉应该是setparent会抢焦点

 
发表于:2007-10-29 10:52:515楼 得分:0
不要再用   setparent,在我上面两句语句下加一个   doevents,让窗体立即显示出来并恢复焦点。
还有你的“操作过程比较长时”在哪里执行的?
发表于:2007-10-29 11:31:566楼 得分:0
to   tiger_zhao

 比如进行数据库查询操作,因为有时数据比较多,所以可能需要等待比较长的时间,这样有时那个等待提示窗口就会出现一条蓝条(很象是标题栏),而加上setparent就不会出现这样的现象。

 另外一点:在后面加上.setfocus,会触发当前控件的lostfocus和validate事件(如果有的话)
发表于:2007-10-29 11:51:357楼 得分:0
蓝条不一定是   form2   上的,通常长时间操作会导致界面刷新的问题,可能的话加些   doevents。
改用   api   的   showwindow   form2.hwnd,   sw_shownoactivate。
发表于:2007-10-29 13:54:278楼 得分:0
to   tiger_zhao

* 我觉得那蓝条应该是form2的,那个蓝条一般是在操作快完成的时候出现(此前一般是全屏白),我的大部分窗口都是11000*7500,只有等待提示窗口是550*57,那蓝条真好这个窗口宽,高度也和标题蓝一样高。

* 刚试过showwindow,没加setparent,焦点不会转移,但同样会出现蓝条;加上setparent,焦点会出现转移(测试多次,应该就是setparent造成的)。

* 觉得不应多加doevents,这样会让操作变长。
发表于:2007-10-29 14:24:049楼 得分:0
将   form2   的显示在不同位置看看蓝条是否一起移到。
对白屏的界面,最好加   doevents,觉得对速度有影响就几百或几千循环执行一次。
发表于:2007-10-29 15:02:4510楼 得分:0
to   tiger_zhao

测试:看来那个蓝条的出现可能是因为窗口上显示vsflexgrid,而vsflexgrid的redraw又关了,这时修改窗口提示,doevents后造成的,调整了一下执行的顺序,就没有出现了。

不过有没有什么办法让setparent不会抢焦点(不是用setfocus,用setfocus会触发lostfocus和validate)
发表于:2007-10-29 15:40:1711楼 得分:20
如果仅仅想将内容显示在   mdiform   上,直接添加一个   picturebox,需要时显示,这样不会影响焦点。
发表于:2007-10-29 15:54:0112楼 得分:0
to   tiger_zhao

    用picturebox可以置前显示吗?而且mdiform上用picturebox只能在mdiform的四周
发表于:2007-10-29 16:39:5213楼 得分:0
那就不能   setparent


快速检索

最新资讯
热门点击