2014-04-15 39 views
0

我有一個WinForm應用程序(計算器)正在導入組合用戶控件。用戶控件有一個keyDown事件處理程序,用於將鍵盤鏈接到控件上的按鈕。啓動我的程序時,不會識別或執行任何keyDown事件。獲取組合用戶控件以處理KeyDown事件

在閱讀了一些類似的帖子之後,我現在認爲這與重點不在我的控制之下有關。我嘗試在我的WinForm負載上執行CalcCompCtrl1.focus()無濟於事。我怎麼能解決這個問題?

爲什麼在我的Form.vb中創建一個keyDown事件處理程序,只是簡單地傳遞信息而無法工作?

Private Sub Calc_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 

    CalcCompCtrl1.MyCalc_KeyDown(sender, e) 

End Sub 

回答

1

這是行不通的,UserControl堅持不重視。如果您嘗試使用大錘,它會將其強制到客戶端控件之一。 KeyPreview hack也無法工作,它是UserControl沒有的VB6遺留屬性。您必須改寫ProcessCmdKey()。 Winforms在之前將其稱爲,它會觸發具有焦點的控件上的KeyDown事件。如果您使用keystroke,則返回true,如果沒有,則調用base.ProcessCmdKey()。選擇性的,你不想吞下一切,或像鍵盤導航(光標鍵和標籤)等基本的東西將停止工作。

+0

調試後,我發現我的上面的代碼工作只需發送KeyDown事件參數到我的控制KeyDown函數。 (1分鐘它沒有工作,下一分鐘它沒有??)感謝這些信息,但我希望我很快就會需要它。 – mschmidt9026

1

在窗體上啓用KeyPreview。這是一個財產。

嘗試將MyBase更改爲Calc-Object-Variable的變量名稱!

+0

我將KeyPreview設置爲true,但沒有解決問題。我編輯了上面的代碼。你的意思是像我上面改變的手柄?似乎沒有影響。 – mschmidt9026