2017-01-19 53 views
0

在我的C#Winforms應用程序中,我有幾個使用熱鍵設置的標籤控件(例如:&名稱)。我們正在使用JAWS屏幕閱讀器。 Label.Text總是給出「&名稱」。有沒有辦法讓標籤文本沒有熱鍵('&')?我不能用String.empty替換'&',因爲它中沒有實際的'&'所需的標籤。獲取C#中沒有熱鍵('&')的標籤文本

+0

而這些標籤應該有一個雙&&。提示正則表達式。 – Steve

+1

可能的重複[如何從字符串中刪除加速字符?](http://stackoverflow.com/questions/3700612/how-can-i-remove-accelerator-characters-from-a-string) –

+0

這是可訪問性問題。我假設根據你的描述,屏幕閱讀器正在讀出&字符。讀者所呈現的是在自己的控制之下。 WinForms控件支持傳統的Accessibility.IAccessible模型。您可以嘗試創建一個自定義標籤,該標籤反過來會提供一個自定義ControlAccessibleObject,其中您可以覆蓋「Value」屬性以使文本不帶&符。 – TnTinMn

回答

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; 
       } 
      } 

     } 

    } 
0

簡單的方法是使用AccessibleObject.Name財產。

例如:String text = label1.AccessibleObject.Name;

相關問題