窗体Show()之后并不是当前活动的窗口,即Form2.Show()之后,这个窗体是在后台的,相当于你正在Firefox,你点击Word之后Firefox的状态请问如何用编程的方法激活Form2?

解决方案 »

  1.   

    form.BringToFront()
    form.Active()
      

  2.   

    SetForeGroundWindow API 函数。
      

  3.   

    SetWindowPos函数可以实现,还可以设置窗体为最顶层窗体。
      

  4.   

    更新一下问题,事件处理程序都是
    {
       Form1.Hide();
       Form2.Show();
    }为什么我在flash控件的Enter事件里处理时Form2出来之后是非激活状态,如果在button控件的Click事件里处理时Form2出来之后是激活状态。还有如果非要在flash控件里的Enter事件里处理的话,怎么办?
      

  5.   

    看楼住的问题像是我以前遇到的调窗体问题.你是不是调用的窗口有可能已打开,你只是不方便用鼠标点击激活?可以在你的代码中这样写:if (frm1.Visible)
    {
        frm1.Focus();
    }
    else
    {
        frm1.Show();
    }
      

  6.   


    你太了解我了,但问题是,按照你的方法也无法激活Form。原因应该是出在Flash控件上,你能不能现在帮我试试?先在Form1里弄一个Flash控件,然后在Flash控件的Enter方法里Form2.Show(),然后Form2不是激活的,Form1才是激活的
      

  7.   

    我试了,在窗体放置Flash控件,也是可以实现点按钮Form2就会被激活的。你到底是要Form1激活还是form2?如果是Form1,那调用后再加上 :
    this.Focus();
      

  8.   


    不是通过按钮点击Show Form2,而是通过Flash控件的Enter事件Form1.Hide(),且Form2.Show(),同时Form2处于激活状态,你能达到这效果吗
      

  9.   

    哦,你说的是隐藏本体,显示Form2?那么说还可以用另一种方式代替。比如Flash放在一个Frame控件里,Enter之后的放在另一个Frame控件里。控制着两个的Visible就可以了。
      

  10.   

    o上面说错了,不是Frame控件而是GroupBox,当然你可以选择自己爱用的容器控件比如Panel都可以,一开始第一个显示,第二个隐藏。Flash上Enter后第一个隐藏,第二个显示。当然按照实际情况也许你需要调整窗体大小以适应第二个容器及里面的控件。这种方式也可以实现你的要求。