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

标签 .net vb.net winforms

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

  1. button_PreviewKeyDown
  2. button_Click(显然取代了 KeyPress 事件)
  3. form_KeyUp
  4. button_KeyUp

我创建的表单如下:

  • 在 ANCESTOR 表单的 KeyUp 事件中,检查它是否是 Enter 键。如果它是 Enter 键,并且事件控件不是按钮,它将按 Tab 键顺序移动到下一个字段。否则它会忽略该键并让控件处理它。如果它是一个按钮,祖先不会假定知道按钮想要控制去哪里,因为它将取决于按钮被“单击”时想要执行的操作。
  • 在 CHILD 窗体的按钮上,单击事件不执行任何操作,并且在 KeyUp 事件和 MouseClick 事件中重复进行处理。
  • ANCESTOR 表单有一个 protected bool 值 EatKeyUp,可以由 CHILD 将其设置为 True。当子窗体需要发送 MessageBox 时使用,因为如果用户通过 MessageBox 上的 OK 按钮输入,仍然有一个剩余的 KeyUp 事件将被祖先窗体消耗。

虽然很笨拙,但这似乎确实有效。我想知道的是,有没有更好的方法?也许我可以在某个地方告诉我的应用程序“通过表单输入而不是制表符输入”?我使用的事件(而不是点击事件)是最好的吗?

最佳答案

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

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

关于.net - 如何使用 Enter 键在字段之间导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/196603/

相关文章:

c# - 使用 .NET 图像转换是否足够?

javascript - 使用 C# 从 Chrome 中现有打开的选项卡中检索值

vb.net - 如何更改 VB.NET 中动态创建的标签的值?

c# - C# 中的停止调试事件

c# - 尝试制作缩放效果

c# - 启动时出现 Visual Studio 调试器异常

c# - 构建网络用户界面

.net - 默认情况下,Polly (.Net) 会重试哪些 HTTP 错误代码?

MySQLCommandBuilder 和外键

vb.net - 在 VB.NET 的新线程上引发事件