如何使用Enter键在字段之间导航

时间:2008-10-13 03:00:01

标签: .net vb.net winforms

我公司有一个用VB6编写的大型应用程序,由于历史原因,使用Enter键而不是Tab键导航应用程序。我不知道VB6,但我知道他们目前在Form的KeyUp事件中的一个大选择语句中设置每个控件的焦点,如果它是一个EnterKey。现在我们开始转换为.NET,并且必须保持一致,这样用户就不必在某些表单上使用TAB而在其他表单上输入。我想写一个祖先形式,它会自动从一个字段输入到另一个字段而不是标签。一位同事告诉我,在VB6中完成的方式是处理不在CLICK事件上而是在KEYUP事件上的按钮。我需要继续这样做,所以在表单完成后我不会将剩余的KeyUp事件传回VB6。按钮的事件顺序是

  1. button_PreviewKeyDown
  2. button_Click(显然替换了KeyPress事件)
  3. form_KeyUp
  4. button_KeyUp
  5. 我按如下方式创建了表单:

    • 在ANCESTOR表单的KeyUp事件中,检查它是否为回车键。如果它是回车键,并且活动控件不是按钮,则它将以Tab键顺序移动到下一个字段。否则它会忽略该键并让控件处理它。如果它是一个按钮,祖先不会假设知道按钮想要控制的位置,因为它取决于按钮在“点击”时想要做什么。
    • 在CHILD表单的按钮上,click事件不执行任何操作,并且处理在KeyUp事件和MouseClick事件中重复。
    • ANCESTOR表格有一个受保护的布尔值EatKeyUp,可由CHILD设置为True。当子表单需要发送MessageBox时使用,因为如果用户通过MessageBox上的OK按钮进入,则仍然会有祖先表单将使用的剩余KeyUp事件。

    虽然很糟糕,但这实际上似乎有效。我想知道的是,有更好的方法吗?也许某些设置我可以告诉我的应用程序“通过表单输入而不是标签”?我正在使用的事件而不是点击事件是最好的吗?

2 个答案:

答案 0 :(得分:2)

现在也许您正在转换时间来推动遵守Windows标准的想法。

直接回答你的问题,上面的机制是一种非常常见的方法,另一种方法是设置表单的键预览属性并直接在表单中处理它。这两种方式都不是一个特别好的解决方案,因为窗口导航根本不是那样做的,

答案 1 :(得分:1)

更好的实现是使用Form的AcceptButton属性,将其设置为表单上某处的隐藏按钮。然后,当用户按下enter键时,单击该按钮,然后在按钮点击事件中,您执行代码以移动到下一个控件。要选择下一个控件,您只需选择项目列表即可。

最简单的方法是创建一个基本表单,然后在其中包含按钮和AcceptButton逻辑。