加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:53:13 所属栏目:百科 来源:网络整理
导读:我有一个非常简单的 Windows窗体控件库,我遇到了实现辅助功能的问题. 我有一个非常简单的表单,其成员包含我的库的控件列表,我已经覆盖了CreateAccessibilityInstance: public partial class Form1 : Form{ protected override AccessibleObject CreateAcces
我有一个非常简单的 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类中的名称,值,角色

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读