工程有2个窗体:form1 和 form2
=====================================
form1的代码(启动窗体):Private Sub Form_Load() '启动时 form2 隐藏
Form2.Hide
End Subfrom2 的代码:有1个timer1 ,Interval=5000 5秒Private Sub Timer1_Timer()
Me.Show ‘显示出form2
End Sub
======================================
现在的问题是:
当 form1 被其他窗口挡住的时候(不可见,但不是visible=false),form2弹出的时候,form1也会被激活显示出来。
如何才能使form2运行的时候,form1不被激活。同时form1不能hide,不能最小化。

解决方案 »

  1.   

    如果你两个form之间没有相互关联的数据的话, 可以在模块中加上启动函数:
    sub main()
    load form2
    end sub然后工程属性设置从sub main启动, 随便你想先显示哪一个窗体都行.还有一种方法就是直接设置工程属性让form2为启动窗体.
      

  2.   

    楼上的方法还是不行的。
    form2显示的时候,还是会激活form1。
      

  3.   

    如果F2是F1的子窗体,那必然要显示F1的.
    你把F2设为独立的窗体,那样在F1里面也不必用Form2.Hide了,因为只要不加载,F2就不存在.
      

  4.   

    谢谢楼上的回答。
    不加载form2,怎么运行form2的代码?form2有个timer的。
    不管是show还是load,都得加载form2。form2默认是隐藏的(hide),通过timer1才显示出form2.现在的问题是:form2显示的时候,会激活from1的界面,而我们要做的是如何不激活form1(这是我的问题)form2 并不是form1的子窗体,是独立的。
      

  5.   

    改成Me.Show vbModal,form1试试
      

  6.   

    Me.Show vbModal,form1 更不行了
      

  7.   


    你重建一个新的测试工程试试:两个窗体模块,一个标准模块。在标准模块 Main() 中显示 Form2。
      

  8.   

    这是Windows标准的行为模式,不可变更。
    Form1 被其他窗口挡住的时候,等于当前活动程序是其他某个程序。
    Form2 弹出是,当前活动程序就变成你的程序,该程序的所有的窗口都会排到其他程序的窗口之前。
      

  9.   

    如果 Tiger_Zhao 的回答是正确的,这个问题就没办法了!
    难道真的没办法吗?
    看过其他语言写的软件,似乎都能解决这个问题。难道vb是个例还是微软的语言都这样?期待有类似经验或者对此问题有兴趣的朋友给个其他解决方案。
      

  10.   

    呵呵,楼主估计连工程的启动项目都没有调整,启动项目选择sub main,然后再按照楼上说的写代码。单说两个窗体都加载出来的话,你需要将两个窗体设置为大小一致的,且form2显示区域覆盖form1的显示区域。
      

  11.   

    什么软件?
    记事本之打开两个文档,在任务管理器中可以看到两个 notepad.exe!而你的两个窗口是属于同一个 exe 的。
      

  12.   

    先感谢几位的回答。
    AisaC 先看清楚我的问题,代码我已经贴出来了,要达到的效果在下面的回复也讨论的比较清楚了。Tiger_Zhao 第一次的解答是我最困惑的,因为这已经做过无数次尝试了,找过、搜索过不少资源,也看到有人提示这个windows的限制等等。2个记事本,是不同的exe,或者exe允许重复启动(2个exe进程),不是一个exe的2个不同的窗体。
    我要的一个exe2个不同的窗体,而且是根据timer启动的。
      

  13.   

    前面我确实没看清楚,不好意思。
    假如你还有第三个窗体form3,form3是启动后就运行的,form3调用form1内的代码来控制timer1是否可用,这样才可以实现。如果没有第三方的窗体或者是一个线程,这个问题应该不能实现。
      

  14.   

    用C试了一下,的确可以做到,应该不是windows的问题,而是VB的问题,拦截form1的消息,并没有收到激活窗口的消息,说明窗口并没有被激活,而可能只是改变了Z序显示出来。
      

  15.   

    再次感谢各位给予回答。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:没发现我的说的问题,那应该你没看清楚我的问题。当然我现在无法确定是不是微软的限定,所以我们才有了上面的讨论。
      

  16.   

    我没有VB6的环境,我没编写代码也没测试,按照我的思路用C#写出来的程序没问题,可以运行。