它应该很简单,但显然没有人知道:如果我在基于Windows窗体的对话框中添加Label
控件,并且我希望JAWS读取此标签,我将如何实现?
使用AccessibleDescription
进行其他控件(如按钮)可以正常工作,但它不适用于标签。甚至MS does not quite seem to know。我也问过FreedomScientific,但他们给了我一些默认答案,比如
一切都没有用。
答案 0 :(得分:3)
我的Windows窗体应用程序出现此问题。
似乎JAWS没有自动读取静态屏幕文本。
按键盘上的“INSERT”+“B”触发“读取当前窗口”JAWS操作 - 然后JAWS读取Label.AccessibleDescription属性(以及其他屏幕详细信息)。
因此,您需要设置辅助功能属性,并且用户必须执行JAWS击键才能读取标签。
答案 1 :(得分:0)
JAWS不一定使用开发人员术语来记录:如果您要做的是HTML,那么请查看Navigation Quick Keys for HTML or the JAWS Keystroke for the type of element you are using。
尝试使用“F”表示FORM或“H”表示HEADING或INSERT + F5以查看表单字段列表是否显示在列表中。对于使用JAWS的最终用户而言,TITLE没有特定的导航辅助功能(尽管逆向工程如何通过JAWS'渲染'是一种简单的试错法。)
答案 2 :(得分:0)
我使用AccessibleName属性并将TextBox,Button和ComboBox设置为可以在该属性中读取的名称。这似乎适用于大多数事情。我还不能用它来阅读标签。如果标签显示动态数据,我建议将标签的动态部分(整个或部分)更改为TextBox,可编辑与否,并设置其辅助功能名称。当它被标记到或获得焦点时,它应该准备好AccessibleName然后是值。所以tbAmoundOwed应该听起来像“欠款文本框125.78美元”(或类似的东西取决于使用大白鲨或其他读者。)****这仍然是一项正在进行的工作。我还没有找到如何在ListView中读取列标题。如果您将焦点设置为ListView中的一行,您通常还需要通过将焦点设置为ListView来跟进。
答案 3 :(得分:0)
默认情况下,如果标签在整个表单上单独存在,则JAWS永远不会读取标签的文本值。但总的来说,这不是常见情况。因此,如果您在表单上还有其他控件,如复选框,选项按钮,文本框等(以及标签),可以从属性窗口设置tabStop属性,那么此解决方案将起作用。在窗体上添加一个组框,并将标签和任何其他控件可聚焦控件放在组框内。将可聚焦控件的制表位属性设置为True。现在,当应用程序启动并且焦点到达组框内部时,由于tabStop属性设置为true的制表符可停止控件,JAWS将读取标签的文本。
在JAWS中还有另一个虚拟化窗口的概念,需要一些脚本但很少使用它,它不是最终用户可以轻松使用的事实和标准方法。
编辑1 :其他选项是使用文本框而不是标签。文本框是可聚焦的控件。现在明显的问题是文本框如何看起来像标签。设置以下两个属性来实现:
编辑2 :您还可以考虑使用工具提示。可以启用JAWS中的设置来读取控件的工具提示。因此,如果有一对标签和文本框控件代表某个字段,那么您可以在文本框中添加工具提示,这可以由JAWS读取。
答案 4 :(得分:0)
我找到的最简单的方法是将样式设置为可选,并将制表位设置为true。
/// <summary>
/// Label which can receive focus on tab. Used to communicate text to a screen reader.
/// </summary>
public class AccessibleLabel : Label
{
public AccessibleLabel()
{
SetStyle(ControlStyles.Selectable, true);
TabStop = true;
}
}