c# – 自定义控件的AccessibleObject实现

前端之家收集整理的这篇文章主要介绍了c# – 自定义控件的AccessibleObject实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的 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类中的名称,值,角色

猜你在找的C#相关文章