Получение текста метки без горячей клавиши ('&') в 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;
}
}
}
}