使用讲述人自定义WinForms控件(辅助功能)

时间:2012-06-02 21:08:27

标签: winforms accessibility

我有一个源自 Control 类的自定义列表控件。

我需要通过MSAA (Microsoft Active Accessibility)让残障人士可以访问它。

到目前为止,我理解我需要创建继承自 ControlAccessibleObject 的类,然后在 Control.CreateAccessibilityInstance 方法覆盖中返回其实例。

问题是我已经实现了这一点,似乎无法使用Windows讲述人工具。

例如,当我点击标准ListView中的某个项目时,讲述人会说出所选的项目文本。

但是当我点击我的控件中的项目时,没有任何反应(尽管我的 ControlAccessibleObject 实现中请求了项目文本)

我认为我还需要实现 IAccessible ,但我查看了.NET refrence源代码,而ListView没有实现此接口。我想也许这是在包装的Win32控件中实现的,所以我看了一下类似的控件--DataGridView - 但是这也没有实现IAccessible。

DataGridView具有辅助功能支持,但是虽然我复制了DataGridViewAccessibleObject的所有重要代码,但它仍无法在我的控件中运行。

有没有人在WinForms中有更多自定义控件可访问性的经验?

1 个答案:

答案 0 :(得分:0)

好的,我找到了它: Control.AccessibilityNotifyClients 方法可以实现。必须在派生控件中覆盖此方法。

然而,为了让屏幕阅读器说出文字,我不得不打电话:

AccessibilityNotifyClients(AccessibleEvents.Focus, index);
AccessibilityNotifyClients(AccessibleEvents.Selection, index);

此处索引是新选择项目的索引。

我在CheckedListBox的.NET参考源中找到了这段代码。当我单独使用Focus或Selection事件时,屏幕阅读器没有反应。语音文本还取决于与新选择的项目对应的 AccessibleObject 状态。