MS Access 组合框和 NVDA

Posted

技术标签:

【中文标题】MS Access 组合框和 NVDA【英文标题】:MS Access comboboxes and NVDA 【发布时间】:2018-09-05 20:46:40 【问题描述】:

我正在使用 MS Access 2010 开发图书馆系统。挑战之一是我们让盲人和其他视障用户访问该系统。

他们使用 NVDA,一种屏幕阅读软件,问题是该软件不会立即读取组合框的内容。为了解决这个问题,必须按 CAPSLOCK+UP 或 INSERT+UP(NVDA 命令)来读取当前焦点所在的行。所以他们目前正在手动逐行执行此操作以了解他们在哪里。

我曾想过通过 Sendkeys 来自动执行此操作,但据我所知,除了 Alt、Shift 和 Ctrl 之外,没有其他方法可以组合键。这是我正在使用的一小段代码,以便向下键下拉组合框:

Private Sub Username_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyDown Then 
Me.ActiveControl.Dropdown 
End If

End Sub

我想添加到此代码中,以便按下 Up 和 Down 键触发通过 INSERT+UP 的 Sendkeys 或其他我不知道的方式读取组合框。这可能吗?有什么想法吗?

【问题讨论】:

您知道替代键的字符简写,对吗? 基本语法很好的解释:contextures.com/excelvbasendkeys.html 感谢您的链接。我知道速记键,但使用 Sendkeys 你只能组合 Alt、Shift 或 Ctrl。如果我输入 INSERTUP 之类的东西,它会触发一个然后另一个,我不会得到我想要的结果。也许真的没有办法用 Sendkeys 或 SendInput 做到这一点,我不知道,但由于我想其他人也想组合不同的键,所以有人可能会解决这个问题 只是我大声打字....您是否考虑过您可能要求 Access 甚至 VBA 执行它不一定能够执行的操作?我很少发现自己使用 INSERT 作为控制键,例如 Shift、Ctrl 和 Alt。 INSERT 具有基于 O/S 的操作功能。这就是为什么它通常不用作控制键的原因。作为副手,Shift/Ctrl/Alt 是特定于应用程序的,没有真正的 O/S 指定功能;另外,Windows 使用 Ctrl 作为登录功能,但仅在登录期间使用。 【参考方案1】:

我想知道是否提出了正确的问题。这听起来像是您正在尝试解决的 Access 中的一个问题。我不熟悉 Access 本身(所以我可能不应该发表评论),但我非常熟悉可访问性。

您是在选择单元格中的复选框,还是弹出对话框中的复选框,例如当您对列进行排序并想要选择/取消选择某些过滤器时?是复选框本身没有标签要读取的问题,还是有标签但标签只能用“全部读取”快捷键(如ins+down)或“读取当前”才能读取的问题(ins+up)?

用 html 术语来说,下面的代码将显示一个复选框,视觉上看起来就像复选框有一个标签,但屏幕阅读器不知道有一个标签。

<input type="checkbox">Do you feel well today?

屏幕阅读器只会说“复选框”。但是,如果您使用 &lt;label&gt; 元素将标签绑定到复选框

<input type="checkbox" id="mycheck"><label for="mycheck">Do you feel well today?</label>

然后屏幕阅读器是否知道复选框有一个标签,并会说“你今天感觉好吗?,复选框,未选中”。

我知道这与最初的问题相去甚远,但我想知道您是在 Access 中创建一个复选框,还是在尝试导航到 Access 中本机存在的复选框(例如排序对话框)。如果您正在创建一个复选框,那么类似于您必须将标签与 html 中的复选框相关联,我想知道是否有办法将标签与 Access 中的复选框相关联。如果是这样,那么您将不需要您的解决方法。

【讨论】:

嗨!非常感谢您的关注。尽管我认为您一定误读了我,但它不是复选框,而是组合框。也就是说,一个下拉菜单,其中包含几行中的项目列表。在 Access 中,它被称为控件,它是由我创建的,用于在表单中工作。 NVDA 可以很好地读取 Access 文本框和标签。组合框本身有一个名称(类似于 html 标签)“用户名”,这也被读取。但是用户名控件组合框中的各行内容不会自动读取,这是我的问题,所以标签不是问题。 啊废话,你是对的。我看到“组合框”,我的大脑说“复选框”。显示下拉列表时,您希望读取所有值吗?通常,当屏幕阅读器在列表中向上/向下箭头时,它只会读取一个值。

以上是关于MS Access 组合框和 NVDA的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

Microsoft Access 组合框和 vba 代码 2007

Microsoft Access VBA 2010 如何创建组合框和数组?

如何确定在 Access VBA 中键入组合框和从下拉列表中选择之间的区别?

组合选项框和组合框以将记录添加到右表

MS Access - 构建一个组合框,该组合框根据先前的组合框选择返回多个值