这应该是简单的,但显然没有人知道:如果我添加一个Label
控件到我的Windows窗体为基础的对话框,我希望这个标签被JAWS读取,我将如何实现?
它可以很好地使用AccessibleDescription
的其他控件,如按钮,但它不与标签工作。就连微软似乎也不太清楚。我也问过FreedomScientific,但他们只是给了我一些默认的答案,比如
- 检查www.microsoft.com/enable 阅读JAWS帮助文件
- 使用JAWS脚本(我不想直接控制JAWS)
- 提供app定制服务的公司地址
我的Windows窗体应用程序有这个问题。
JAWS似乎不能自动读取静态屏幕文本。
按键盘上的"INSERT"+"B"触发"读取当前窗口"JAWS动作- JAWS然后读取标签。AccessibleDescription属性(以及其他屏幕细节)。
因此,您需要设置可访问性属性,并且据我所知,用户必须执行JAWS按键才能读取标签
JAWS并不一定使用开发人员术语:如果您要做的是HTML,那么请查看HTML的导航快速键或您正在使用的元素类型的JAWS击键。
尝试使用"F"的形式或"H"的标题或INSERT+F5,看看是否表单字段的列表显示在列表中。对于使用JAWS的最终用户来说,没有什么特定的TITLE作为导航辅助(尽管逆向工程如何通过JAWS"呈现"它们是一个简单的尝试和错误)。
我使用accessblename属性并设置TextBox, Button和ComboBox的名称,它可以在该属性中读取。这似乎对大多数事情都有效。我还不能让它读标签。如果标签显示动态数据,我建议将标签的动态部分(整体或部分)更改为TextBox(可编辑或不可编辑),并设置其可访问性名称。当它获得选项卡或获得焦点时,它应该准备好accessblename,然后是值。所以tbAmoundOwed应该听起来像"欠债金额文本框125.78美元"(或类似的东西取决于使用Jaws或其他阅读器)****这仍然是一个正在进行的工作。我没有发现如何在ListView中读取列标题。如果你将焦点设置为ListView中的一行,你通常还需要将焦点设置为ListView
默认情况下,如果label的文本值单独存在于整个表单中,JAWS永远不会读取它的文本值。但总的来说,这不是一个常见的场景。所以,如果你有其他控件以及窗体上的复选框,选项按钮,文本框等(连同标签),tabStop属性可以从属性窗口设置,那么这个解决方案将工作。在表单上添加一个组框,并将标签和任何其他可对焦控件放在组框中。将可对焦控件的制表符属性设置为True。现在,当应用程序启动时,焦点到达组框内部,因为选项卡停止控件的tabStop属性设置为true, JAWS将读取标签的文本。
在JAWS中虚拟化窗口的另一个概念是需要一些脚本,但很少使用,而且它不是最终用户可以轻松使用的事实和标准方法。
Edit 1:另一种选择是使用文本框代替标签。文本框是可聚焦控件。现在很明显的问题是,文本框看起来如何像标签。设置以下两个属性来实现:
- ReadOnly = True
- BorderStyle = None
Edit 2:您也可以考虑一个工具提示。JAWS中的设置可以启用读取控件的工具提示。因此,如果有一对标签和文本框控件表示某个字段,那么您可以在文本框中添加工具提示,以便JAWS读取。
我发现最简单的方法是将样式设置为可选,并将制表符设置为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;
}
}