Получение текста метки без горячей клавиши ('&') в C#

В моем приложении C# Winforms у меня мало элементов управления ярлыками с установленными горячими клавишами (например: &Name). Мы используем программу чтения с экрана JAWS. Label.Text всегда дает "& Имя". Есть ли способ получить текст метки без горячих клавиш ('&')? Я не могу заменить '&' на String.empty, потому что в нем мало меток с фактическим '&'.

3 ответа

Простой способ - использовать свойство AccessibleObject.Name.

Пример: String text = label1.AccessibleObject.Name;

Можете ли вы привести пример, где требуется '&'?

TrimStart удалит символы из начала строки https://msdn.microsoft.com/en-us/library/system.string.trimstart(v=vs.110).aspx

Как я уже упоминал в своем предыдущем комментарии, это проблема доступности. Следующий обычай 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;
                }
            }

        }

    }
Другие вопросы по тегам