2014-09-23 91 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(); 
}