【问题标题】:Winforms TextBox gets focus but doesn't capture keyboard inputWinforms TextBox 获得焦点但不捕获键盘输入
【发布时间】:2014-11-18 07:03:32
【问题描述】:

这让我很困惑。

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

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

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

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

我希望我已经提供了足够的信息,而不会被无数的细节压得喘不过气来。如果还有其他人需要为我指出正确的方向,我很乐意提供。

【问题讨论】:

    标签: wpf winforms keyboard focus


    【解决方案1】:

    由于 WinForm 文本框是托管的,因此将焦点设置在它上不会激活托管 WPF 窗口。添加一行以激活窗口。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2022-06-28
      • 2015-06-07
      相关资源
      最近更新 更多