【问题标题】:AccessibleObject implementation for custom controls自定义控件的 AccessibleObject 实现
【发布时间】:2016-07-23 14:11:15
【问题描述】:

我有一个非常简单的 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 方法以返回一个自定义的可访问对象,它什么也没显示。

为什么我的控件不在树上?

我不知道我错过了什么。

【问题讨论】:

  • 您能否分享一些源代码示例,以免重新输入您在此处发布的内容?

标签: c# winforms coded-ui-tests


【解决方案1】:

覆盖 AccessibleForm 类中的名称、值、角色

【讨论】:

  • 谢谢。有关更多信息:即使您设置了属性,默认实现也始终返回 null。因此,为什么您需要显式覆盖它。
猜你喜欢
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多