vb运行form2,怎样不激活form1?工程有2个窗体:form1 和 form2form1
vb运行form2,怎样不激活form1? 工程有2个窗体:form1 和 form2 ===================================== form1的代码(启动窗体): Private Sub Form_Load() '启动时 form2 隐藏 Form2.Hide End Sub from2 的代码:有1个timer1 ,Interval=5000 5秒 Private Sub Timer1_Timer() Me.Show ‘显示出form2 End Sub ====================================== 现在的问题是: 当 form1 被其他窗口挡住的时候(不可见,但不是visible=false),form2弹出的时候,form1也会被激活显示出来。 如何才能使form2运行的时候,form1不被激活。同时form1不能hide,不能最小化。[最优解释] 这是Windows标准的行为模式,不可变更。 Form1 被其他窗口挡住的时候,等于当前活动程序是其他某个程序。 Form2 弹出是,当前活动程序就变成你的程序,该程序的所有的窗口都会排到其他程序的窗口之前。[其他解释] 用C试了一下,的确可以做到,应该不是windows的问题,而是VB的问题,拦截form1的消息,并没有收到激活窗口的消息,说明窗口并没有被激活,而可能只是改变了Z序显示出来。[其他解释] 如果你两个form之间没有相互关联的数据的话, 可以在模块中加上启动函数: sub main() load form2 end sub 然后工程属性设置从sub main启动, 随便你想先显示哪一个窗体都行. 还有一种方法就是直接设置工程属性让form2为启动窗体.[其他解释] 楼上的方法还是不行的。 form2显示的时候,还是会激活form1。[其他解释] 如果F2是F1的子窗体,那必然要显示F1的. 你把F2设为独立的窗体,那样在F1里面也不必用Form2.Hide了,因为只要不加载,F2就不存在.[其他解释] 谢谢楼上的回答。 不加载form2,怎么运行form2的代码?form2有个timer的。 不管是show还是load,都得加载form2。 form2默认是隐藏的(hide),通过timer1才显示出form2. 现在的问题是:form2显示的时候,会激活from1的界面,而我们要做的是如何不激活form1(这是我的问题) form2 并不是form1的子窗体,是独立的。[其他解释] 改成Me.Show vbModal,form1试试[其他解释] Me.Show vbModal,form1 更不行了[其他解释]
引用: 楼上的方法还是不行的。 form2显示的时候,还是会激活form1。 你重建一个新的测试工程试试:两个窗体模块,一个标准模块。在标准模块 Main() 中显示 Form2。
[其他解释] 如果 Tiger_Zhao 的回答是正确的,这个问题就没办法了!
难道真的没办法吗?
看过其他语言写的软件,似乎都能解决这个问题。难道vb是个例还是微软的语言都这样?
期待有类似经验或者对此问题有兴趣的朋友给个其他解决方案。
[其他解释] 呵呵,楼主估计连工程的启动项目都没有调整,启动项目选择sub main,然后再按照楼上说的写代码。
单说两个窗体都加载出来的话,你需要将两个窗体设置为大小一致的,且form2显示区域覆盖form1的显示区域。
[其他解释] 引用: 看过其他语言写的软件,似乎都能解决这个问题。难道vb是个例还是微软的语言都这样? 什么软件?
记事本之打开两个文档,在任务管理器中可以看到两个 notepad.exe!而你的两个窗口是属于同一个 exe 的。
[其他解释] 先感谢几位的回答。
AisaC 先看清楚我的问题,代码我已经贴出来了,要达到的效果在下面的回复也讨论的比较清楚了。
Tiger_Zhao 第一次的解答是我最困惑的,因为这已经做过无数次尝试了,找过、搜索过不少资源,也看到有人提示这个windows的限制等等。
2个记事本,是不同的exe,或者exe允许重复启动(2个exe进程),不是一个exe的2个不同的窗体。
我要的一个exe2个不同的窗体,而且是根据timer启动的。
[其他解释] 前面我确实没看清楚,不好意思。
假如你还有第三个窗体form3,form3是启动后就运行的,form3调用form1内的代码来控制timer1是否可用,这样才可以实现。
如果没有第三方的窗体或者是一个线程,这个问题应该不能实现。
------其他解决方案--------------------
我做了一个工程进行测试。没有出现搂主所说的问题。
最好不要动不动就假定微软的 VB 开发团队比我们这些初学者还要傻。事实上,他们比我们这里大多数人聪明。
[其他解释] 再次感谢各位给予回答。
AisaC的代码我试过。不管用第三个窗体form3来显示form2(form3中代码form2.show或form2.visble=true)。还是form2自己show出来(me.show或者me.visble=true),都会激活form1.
另外通过sub main 来load或show这几个窗体都和上面是一个效果。
注意:form1的是主窗体,他的状态是可见的,只是我们点了屏幕或者点了其他应用程序造成了软件(form1)被其他程序遮挡住了,form1状态不是visile=false 也不是 hide 也不是最小化 。
c_cyd2008:的方法某种程度上有可行的,只有在确定这确实是vb无法解决的才能用这方法。
我曾尝试用判断form1是不是被其他窗口挡住的方式来写代码。如果form1被其他窗口挡住,form1就最小化,form2再show,但是需要考虑情况太多,似乎也不是最完美的。这个问题暂不考虑。
of123:没发现我的说的问题,那应该你没看清楚我的问题。当然我现在无法确定是不是微软的限定,所以我们才有了上面的讨论。
[其他解释] 引用: 再次感谢各位给予回答。 AisaC的代码我试过。不管用第三个窗体form3来显示form2(form3中代码form2.show或form2.visble=true)。还是form2自己show出来(me.show或者me.visble=true),都会激活form1. 另外通过sub main 来load或show这几个窗体都和上面是一个效果。 注意:form1的是主窗体,他的状态…… 我没有VB6的环境,我没编写代码也没测试,按照我的思路用C#写出来的程序没问题,可以运行。