获取复合用户控件以处理KeyDown事件

时间:2014-04-15 13:53:14

标签: vb.net winforms

我有一个导入复合用户控件的WinForm应用程序(计算器)。用户控件有一个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

2 个答案:

答案 0 :(得分:1)

在表单上启用KeyPreview。这是一个属性。

尝试将MyBase更改为Calc-Object-Variable的变量名称!

答案 1 :(得分:1)

这不起作用,UserControl坚持不关注焦点。如果您尝试使用大锤,它将强制它到客户端控件之一。 KeyPreview hack也无法工作,它是UserControl没有的VB6遗留属性。

您必须改为覆盖ProcessCmdKey()。 Winforms在之前调用它它会在具有焦点的控件上触发KeyDown事件。如果您使用击键,则从方法返回 true ,如果您没有,则调用base.ProcessCmdKey()。有选择性,你不想吞下所有东西或键盘导航(光标键和标签)等基本内容将停止工作。