Winforms TextBox获得焦点但不捕获键盘输入

时间:2014-09-23 22:42:34

标签: wpf winforms keyboard focus

这令我感到困惑。

我编写了一个弹出框,其中包含一个托管在WindowsFormsHost中的WinForms UserControl,后者又托管在一个显示在屏幕上的Primitives.Popup中。整个应用程序是WPF,但是这个控件是从WinForms编写的早期应用程序中取消的。

弹出窗口由外部事件(来自CTI服务器的来电)激活。

UserControl内部是一个文本框控件。当用户在文本框中单击时,我在Popup上调用Focus方法,然后在文本框上调用Focus方法。文本框得到了关注。我可以相当肯定,因为该框在单击后显示了一个光标,而且我还有一个“GotFocus”事件处理程序,用于打印调试消息。

但是,如果在传入事件发生时有另一个程序处于活动状态,则键盘上按下的任何键都将继续转到该程序,而不是文本框。只有当用户点击我的应用程序的另一部分(即弹出窗口外的部分屏幕)才能使其成为活动程序,然后在文本框中单击才能接收键盘输入的文本框。

我希望我已经提供了足够的信息,而没有用无数的细节压倒你。如果还有其他人需要指出我正确的方向,我会很乐意提供它。

1 个答案:

答案 0 :(得分:1)

由于WinForm TextBox是托管的,因此设置焦点不会激活托管WPF窗口。添加一行以激活窗口。

private void TextBox_Click(object sender, EventArgs e)
{
    this.Activate(); //activate the Window
    (sender as System.Windows.Forms.TextBox).Focus();
}