2014-09-23 113 views
0

这让我感到莫名其妙。WinForms TextBox获取焦点,但不捕获键盘输入

我写了一个弹出框,它由一个WindowsFormsHost中托管的WinForms UserControl组成,该窗体依次位于显示在屏幕上的Primitives.Popup中。整个应用程序是WPF,但是此控件已从WinForms中编写的早期应用程序中解除。

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

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

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

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

回答

1

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

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