丢失了在KeyDown中获取Tab键的能力

时间:2012-10-11 18:25:36

标签: vb.net winforms keydown

我正在开发一个应用程序,它使用了许多在运行时交换的面板。通过处理keydown事件并检查应用程序的当前“状态”以确定如何路由密钥来控制面板的交换。

我正在表单设计师移动面板和标签周围进行一些清理工作,现在我已经以某种方式禁用了我的主表单在我的keydown事件中拾取tab键的能力。我仍然获得所有其他密钥,包括输入密钥。

代码没有改变,并且使用tab键进行了大量测试以便正常运行,所以我只能想象在设计师中玩游戏时我不小心关掉了一些重要的属性。

我在主窗体中打开了keypreview。由于我得到其他关键事件,我不相信我的keydown处理程序工作不正确。不知何故,我的表格停止了通过Tab键。 TabIndexes是按顺序编号的,但它们无关紧要,因为我使用keypreview处理事件,然后让tabindex确定它的下一个跳转。

我认为对于那些曾经去过那里并且曾经打过这个的人来说,这可能很容易。我有使用tab键的备份仍在运行,但我今天在逻辑上实现了飞跃,因此我还没有准备好回滚或对表格上的每个对象进行并排比较。

2 个答案:

答案 0 :(得分:2)

那不应该有效。当你对表格有任何控制可以获得焦点时,不会。 Tab键和光标键用于导航,将焦点从一个控件移动到另一个控件。

KeyPreview属性是VB6旧版兼容性属性,用于实现自定义快捷键击。拦截导航键的代码在触发表单的KeyDown事件的代码之前运行。您应该重写ProcessCmdKey()方法,它在导航代码之前运行,以便可以看到Tab和光标键:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Tab Then
        '' Do something, preferably navigation related since that what the user expects
        ''...
        Return True   '' That means that the key was consumed
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

答案 1 :(得分:0)

我搜索了tabstop并找到了一个真实的对象。

我在VS中的“查找”找不到任何东西,但后来我在最后一个面板上看到了一个列表框,我添加到我的项目中已经打开了tabstop。

关闭这个让我回到原来的位置,我的代码拿起了Tab键。