我有一个非常简单的
Windows窗体控件库,我遇到了实现辅助功能的问题.
我有一个非常简单的表单,其成员包含我的库的控件列表,我已经覆盖了CreateAccessibilityInstance:
public partial class Form1 : Form { protected override AccessibleObject CreateAccessibilityInstance() { return new AccessibleForm(this); } public MyContainer MyContainer; public Form1() { InitializeComponent(); MyContainer = new MyContainer(); MyContainer.Controls.Add(new MyButton()); } }
AccessibleForm类如下所示:
public class AccessibleForm: Control.ControlAccessibleObject { private Form1 form1; public AccessibleForm(Form1 owner):base(owner) { this.form1 = owner; } public override AccessibleObject GetChild(int index) { return this.form1.MyContainer.Controls[index].AccessibilityObject; } public override int GetChildCount() { return this.form1.MyContainer.Controls.Count() ; } }
MyContanier和MyButton类继承自BaseControl,它们非常简单:
public class BaseControl : Control { protected override AccessibleObject CreateAccessibilityInstance() { return new AccessibleObject(); } } public class MyContainer:BaseControl { public List<BaseControl> Controls { get; set; } public MyContainer() { this.Controls = new List<BaseControl>(); } } public class MyButton:BaseControl { }
关键是当我运行UIVerify工具以查看我的控件是否生成了正确的结构时,我看不到它们:
另一点是,如果我以这种方式从AccessibleForm类修改GetChild方法:
public override AccessibleObject GetChild(int index) { return new AccessibleObject(); ////return this.form1.MyContainer.Controls[index].AccessibilityObject; }
我可以在UIVerify上看到一个节点:
但是修改GetChild方法以返回自定义可访问对象,它什么也没有显示.
为什么我的控件不在树上?
我不知道我错过了什么.
解决方法
覆盖AccessibleForm类中的名称,值,角色