在C#中没有热键('&')获取标签文本

时间:2017-01-19 13:12:53

标签: c# winforms hotkeys ampersand

在我的C#Winforms应用程序中,我很少使用热键设置标签控件。(例如:& Name)。我们正在使用JAWS屏幕阅读器。 Label.Text始终给出"& Name"。有没有办法在没有热键的情况下获取标签文本('&')?我不能取代'&'使用String.empty,因为实际的'&'标签很少。需要它。

3 个答案:

答案 0 :(得分:0)

你能举例说明'&'需要吗?

TrimStart将从字符串https://msdn.microsoft.com/en-us/library/system.string.trimstart(v=vs.110).aspx

的开头删除字符

答案 1 :(得分:0)

正如我在之前的评论中提到的,这是一个可访问性问题。以下自定义Label公开了一个新的string属性AccessibleValue,可以将其设置为AccessibleObject将作为其值返回的文本。

我不知道这是否适用于JAWS屏幕阅读器,但在使用Inspect工具时确实显示了自定义值。

public class AccessibleLabel : Label
    {
    protected override AccessibleObject CreateAccessibilityInstance()
        {
        return new LabelAccessibleObject(this);
        }

    public string AccessibleValue { get; set; }

    private class LabelAccessibleObject : ControlAccessibleObject
        {
        private AccessibleLabel myowner;
        public LabelAccessibleObject(AccessibleLabel owner)
            : base(owner)
            {
            this.myowner = owner;
            }

        public override AccessibleRole Role
            {
            get
                {
                AccessibleRole accessibleRole = base.Owner.AccessibleRole;
                if (accessibleRole != AccessibleRole.Default)
                    {
                    return accessibleRole;
                    }
                return AccessibleRole.StaticText;
                }
            }

        public override string Value
            {
            get
                {
                if (string.IsNullOrEmpty(myowner.AccessibleValue))
                    {
                    return base.Value;
                    }
                else
                    {
                    return myowner.AccessibleValue;
                    }
                }
            set
                {
                base.Value = value;
                }
            }

        }

    }

答案 2 :(得分:0)

简单的方法是使用 AccessibleObject.Name 属性。

Ex:String text = label1.AccessibleObject.Name;