【发布时间】:2013-11-18 15:23:17
【问题描述】:
所以我在处理某种情况时遇到了一些问题。我有一个应用程序,它是一个 MDI 应用程序,它可以打开自定义文档。我的 MDI 父级有一个 ToolStrip,其中包含一些控件、一个文本框和一个按钮。文本框包含一个项目的数量值,然后有一个按钮可以将项目添加到文档中。最快操作的模型是,从 qty 文本框开始,输入 qty,tab 到部件号文本框并输入部件号,然后 tab 到添加按钮,然后按 enter 键或空格键。这比使用鼠标单击按钮或单击输入文本框要快得多。所以我希望我的应用在触发按钮后自动聚焦 qty 文本框。
我已经处理了 ToolStripMenuItem.Click 事件,该事件添加了项目,然后重新调整了数量框,当使用鼠标单击按钮时它可以完美地工作。但是由于某种原因我还没有发现,这不适用于键盘触发按钮时。我知道正在触发单击事件,因为该项目已正确添加,但未正确处理焦点。实际上,在这种情况下,似乎焦点完全失去了,选项卡停止了功能,除了鼠标之外无法重新获得焦点。我尝试了以下方法:
在父窗体中调用 Form.Activate(),并处理 Activated 事件以聚焦文本框。
在父窗体上调用 Focus(),并处理 GotFocus 事件以聚焦文本框。
好像底层框架无法正确处理按键事件,并且没有为 ToolStripMenuItemButton 控件公开任何按键事件。我有点不知所措。该应用程序是功能性的,因为鼠标可以工作,并且该应用程序实际上可以使用,但为了获得最佳功能,我需要让它工作,以便可以在不使用鼠标的情况下完成快速数据输入。
【问题讨论】:
-
就调用给定事件而言,这两种情况之间应该没有任何区别。我在这里看到两个可能的问题:要么你在另一个事件中做某事,而这两种情况都没有触发(例如:KeyUp 不是由鼠标触发的);或者在这两种情况下都没有达到点击事件(你说这没有发生......)。无论如何,最好看一下代码,请发布相关部分。
-
@varocarbas -- 我通过创建一个简单的测试示例验证了他的问题。出于某种原因,ToolStripButton 类没有任何与键盘相关的事件。
-
我已经能够重现你的情况(当然很奇怪,毫无疑问);尽管您得到的答案似乎并没有提供始终有效的解决方案(有时有效,有时无效),但也许这是您拥有的最好的东西......
-
@roryap 如上面评论中所述;不知道这种奇怪的情况。只是一些澄清:我没有建议使用任何与键相关的事件,只是写了一个可能是对该问题的合理解释的示例(但显然,没有合理的解释:只是纯粹的怪异);我测试了您的代码,并且正如预期的那样(就表单事件而言),并不是 100% 准确(无论如何我已经 +1 了),这取决于用户选择的内容(表单与否)。在 OP 的位置上,我会做一些测试以提出一个可靠的解决方案。
-
@varocarbas 我很好奇在什么情况下您能够看到此解决方案不起作用?如果你找到了我想知道的,我可以解决它。它似乎对我来说足够了。如果将来我确实遇到了问题,我将不得不弄清楚。感谢您的反馈!