输入键模拟点击不适用于复选框

Posted

技术标签:

【中文标题】输入键模拟点击不适用于复选框【英文标题】:Enter Key simulate click not working for checkboxes 【发布时间】:2016-05-27 04:19:29 【问题描述】:

我已经复制并稍微修改了this post 底部的代码,以允许在我创建的工作表表单上的表单控件之间切换。这是与 KeyCode = vbKeyEnter 相关的部分:

Select Case KeyCode
Case vbKeyTab
    Dim Backward As Boolean
    Backward = (Shift And fmShiftMask)

    Call MoveFocus(Cntrl:=Cntrl, TabIndex:=TabIndex, Backward:=Backward)

Case vbKeyEnter
    Select Case TypeName(Cntrl)
    Case TxtBoxType
        If Not (Cntrl.EnterKeyBehavior And Cntrl.MultiLine) Then
            Call MoveFocus(Cntrl:=Cntrl, TabIndex:=TabIndex)
        End If
    Case Else
        On Error Resume Next
        Application.Run Sheet1.CodeName & "." & Cntrl.name & "_Click"
        On Error GoTo 0
    End Select
End Select

该代码适用于在控件之间向前和向后切换。但是,我在使用回车键检查和取消选中复选框控件时遇到了麻烦。它适用于选项按钮,但不适用于复选框。如果我将CheckBox1.Value = True 添加到 CheckBox1_Click 事件中,它可以检查它是否为真,但自然不会允许它取消选中为假。我尝试添加以下 IF 语句以根据当前值将其设置为 true 或 false,但没有任何反应。

If CheckBox1.Value = True Then
    CheckBox1.Value = False
Else
    CheckBox1.Value = True
End If

另一个注意事项:当我按 Enter 并且表单控件没有任何反应时,它会将活动单元格向下移动到活动列。有什么建议吗?

【问题讨论】:

空格键一直是切换复选框的公认方法。为什么要重写 Windows GUI 系统? 我想我不知道空格键是复选框切换(此时仍然有点绿色)。此外,我正在为请求创建表单的人 - 在数字键盘上使用左手制表键和右手键数字/输入。我会确保空格键对我有用,并询问这对他来说是否足够。如果没有,有没有办法让它与 enter 一起工作?感谢 Jeeped 的帮助。 If KeyCode = 13 Then CheckBox1.Value = Not CheckBox1.Value 按要求工作... 在我看来,构建一个用户表单来处理这个数据输入任务会容易得多。 【参考方案1】:

这可能是也可能不是编程问题的答案;我会让选民决定。Q.输入键模拟单击不适用于复选框

你为什么要这么做?您正在花费时间和精力故意“破坏”一个工作系统。 spacebar 长期以来一直是打开和关闭复选框的公认按键,TabShift+Tab 是用于在表单控件之间导航,Enter↵OK 的默认值。

我所说的“工作系统”是指整个 Mac/Windows/Linux GUI 系统,以及经过长期定义的标准实践培训的数百万人。您可以将鼠标从任何称职的办公室工作人员手中拿走,他们的工作效率不会受到影响。他们可以浏览系统和应用程序来执行他们的工作,因为系统中的所有内容,从设置视频分辨率到将员工的考勤卡数据输入自定义表单工作方式相同

让一个 Windows 用户把他们放在他们的第一台 Mac 前。他们可以使用这些程序并完成工作,因为绝大多数操作(尤其是应用程序基本操作的操作)都是相同的。将 Mac 用户放在 Linux 机器前,你会得到相同的结果。机器的基本日常操作和程序都是一样的。

如果您要创建一个专有系统,将他们所有的培训、实践和经验都扔到窗外,那么任何寻找工作的潜在申请人带着一份充满办公室经验的简历有什么意义?

使用 空格键 来打开和关闭复选框早于 Windows 3.0。制造更好的捕鼠器和重新发明***是有区别的¹。


¹ 如果您不认为维护 GUI 标准是一件值得努力的事情,请考虑一下 Office 2007 功能区造成的强烈反对。催生了一个致力于生产带回 Office 2003 功能的附加组件的整个子行业。

【讨论】:

我不同意你的观点,并计划继续让空格键发挥它的魔力。如果我知道空格键是我不会提出问题的标准。我从未接受过正式的 excel 培训,我猜也从未注意到它。可能不值得花时间剖析,但在这一点上,我只是有点好奇,如果代码设置为模拟点击并且点击确实有效,为什么它不起作用。是否设置了允许空格键工作的相同内部流程来阻止它以保持其设计意图? tbh,我并没有仔细查看您提供的代码,但出于所有意图和目的,如果您非常想要,您可以重定向任何内容;即使您必须一直拦截通过 Windows 内核消息泵的消息。 [tab] 和 [shift]+[tab] 导航应该是内置的。如果它不能正常工作,那么您需要修改表单控件所在的 Z 顺序。我稍后可能会将其视为一项智力练习,但我需要时间来构建一个“测试台”用户表单,我会这样做暂时没有。 一个被证明是关键的注意事项是表单控件直接在工作表上,而不是在用户表单或框架内。我了解到将它们放在一个框架内可能允许我设置标签索引顺序。但是,我已经使用 60 多个控件将其全部准备好,并试图找到一种方法来在一个框架中重建整个表单。 要对表单控件的 z 顺序进行编程,请参阅 What order does a For Each Next loop through my checkboxes。仔细阅读,它与您的预期相反。

以上是关于输入键模拟点击不适用于复选框的主要内容,如果未能解决你的问题,请参考以下文章

Listitem 点击不适用于复选框 Android

Android Webview Back按钮适用于模拟器,但不适用于设备

Safari:<label> 元素中的 SVG 似乎不适用于“点击”事件

如何正确使用 SendInput() 在 C# 中模拟鼠标输入

安卓通过adb 模拟键盘输入、点击屏幕、滑动、按键

vba模拟键盘操作?