请教怎样让一个窗口能够总是具有输入焦点?试过以下方法:this.Active();SetForegroundWindow(IntPtr hwnd);SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint flag);但是使用这些方法,当用户切换窗口的时候,指定的窗口只是任务按钮在闪烁,并没有真正获得输入焦点。请问,怎样才能使用户切换到其他窗口的时候,指定的窗口立刻切换回来并获得输入焦点呢?

解决方案 »

  1.   

    timer 控件撒 1秒1次 不行 1毫秒1次 把其他窗口搞死搞残废
      

  2.   

    设置Active()的时候,也把窗体设置为最大化,不行再设置TopMode属性吧,让窗体顶置。更狠的就不让窗口最小化!
    哈哈,有点狠!这是干嘛呢~~~?[align=center]*************************************************
    本内容使用CSDN小秘书回复
    每天回帖即可得10分可用分!
    *************************************************[/align]
      

  3.   


    你没看明白我的意思。就算是使用了Timer控件,在Tick事件中怎么写呢?如果用户切换到了其他窗口,用上面说的那几种激活窗口的方法都只能使目标窗口闪烁而已。我是想用代码把窗口直接切换过来并使之获得输入焦点。
      

  4.   

    那个窗口的textbox没值的时候一离开焦点就重新赋予焦点或者可以设置个被盖住的textbox
      

  5.   


    做提醒用。我写的一个备忘录程序,在指定的时间提醒用户要做的事情。弹出的提示窗口设置为TopMost并且是全屏的。但是用户如果按下了Alt + Tab,输入焦点就切换到别的窗口上去了。有时候在窗口弹出的一瞬间如果点了鼠标,在提示窗口弹出的时候也会没有输入焦点。比如正在用QQ跟网友聊天,当提示窗口弹出的时候点了QQ聊天窗口,这时候输入焦点在QQ上,按下Alt + C,没有关闭“备忘录”的提醒窗口,却把QQ的聊天窗口给关了。所以我就想使备忘录的提醒窗口总是保持输入焦点。
      

  6.   

    我靠 用了 timer 控件还需要判断吗if (!this.textBox1.Focused)
    {
        this.Activate();
        this.textBox1.Focus();
        this.BringToFront();
    }
    搞定
      

  7.   


    大哥,你用这段代码试一试。把它Deactive事件当中,运行这个程序,然后再打开一个记事本,看看输入焦点是在记事本上还是在你写的那个程序上!事实上,不管是this.Active()还是调用系统API,比如SetForegroundWindow(IntPtr hwnd)和SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint flag),当用户切换到另一个窗口的时候,这些方法只会使指定窗口的任务栏按钮闪烁,根本不会自动切换过去。引用百度百科里的话:“Windows NT 5.0:当用户在另一个窗口中工作时,应用程序不能强行设置一个窗口到前台。相反,SetForeground函数将会激活窗口并且调用FlashWindowEx函数通知用户。”
      

  8.   


    没用的,这样只能使textbox成为这个窗口的“活动控件”,但是不会使这个窗口成为“活动窗口”。