我想弹出某窗体后,使该窗体顶置并且获得焦点,无论其他程序怎么样,该窗体还是拥有焦点,直到把这个窗体关闭.这该怎么实现呢?

解决方案 »

  1.   

     Form2 form = new Form2();
                form.ShowDialog();
    用showdialog就使窗体无法失去焦点
      

  2.   

    Form2 form = new Form2(); 
    form.TopMost=true; //这个,让你永远在上面!
    form.ShowDialog(); 
      

  3.   

    以上方法可以使窗体顶置,程序内部获得绝对焦点.但是其他Windows应用程序如果有什么动作则这个窗体(整个程序)将会失去焦点.例如QQ某个好友给你发了一个视频或者图片,则那个聊天窗口获得焦点.该窗体失去焦点!!!!!即使这个窗口是顶置的
    我就是想问问怎么样让这个程序绝不失去焦点.
      

  4.   

    试下在窗口的LostFocus事件里重新为自己Focus()没经过试验,要行的话记得给分啊$_$
      

  5.   

    回5楼:不好使
    没有LostFocus事件 有个Deactivate
    窗体失去焦点时会触发此事件,但是在这里面this.Focus();根本不能再使自己获得焦点(但是如果在this.Focus()上加一断点则可以使该窗体获得焦点)
      

  6.   

    我的意思是说
    使一个窗体拥有绝对焦点
    就是说.除非关闭此窗体,否则任何其他显示的Windows应用程序窗口均无法获得焦点!不是一个简简单单的ShowDialog()的事情.
      

  7.   

    Form form=new Form();
    ......
    form.Show();
    //重载OnLostFocus事件
    protected override void OnLostFocus(EventArgs e)
            {
                base.OnLostFocus(e);
                this.Focus();
            }我看了一下,在属性栏里是找不到LostFocus事件,那是因为太多了,没办法一一列出,不代表没有。
      

  8.   

    做一个系统钩子,拦截WM_ACTIVE消息,然后都始终激活你的程序窗体
      

  9.   


    老兄 我不大会做钩子程序啊!
    你能不能帮我做一个DLL 我调用里面的方法去实现呢?
      

  10.   

    有两个API函数
            [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)]
            public static extern IntPtr GetForegroundWindow();  //获得当前活动窗体的句柄
            [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
            public static extern bool SetForegroundWindow(IntPtr hWnd);//设置此窗体句柄的窗体为活动窗体因为每个窗体的句柄都是唯一的,所以你先保存下你窗体的句柄(this.IntPtr获得),然后用一个Timer,设置间隔为1秒或者自己定个时间。
    然后你用Api函数GetForegroundWindow(),此函数返回一个当前活动窗体的句柄,你和自己窗体的句柄比较,如果相同什么也不做。如果不同,则用SetForegroundWindow(this.IntPtr)设置自己为活动窗体,如果还嫌不够可以去看下SendMessage API函数发一个消息把前一个窗体最小化或者关了。活动窗体就是当前具有输入焦点,或者说用户正在使用的窗体。
      

  11.   

    this.Handle 哈哈哈哈!问题解决!
    感谢walkingmu
      

  12.   

    我也是遇到这个问题了
    我通过我打开一个窗体form2
    但是这时候后面的form1内的datagrid 控件内有新数据更新时,会把form1 置为活动(前台)怎么让form1的更新在后台完成呢,当我关闭form2时在显示form1.
      

  13.   

    确实解决问题 this.Handle。