2013-10-10 24 views
3

我正在執行必須檢查菜單項內容的操作。菜單項包含標題+快捷鍵(幫助F1)如何使用UI自動化檢查菜單項?

screen1

,但我已經遇到檢查是否有菜單快捷鍵(F1)的問題。 AutomationElement不包含任何有關此密鑰的信息。 AccessKey和AcceleratorKey是空的。

enter image description here

我怎樣才能獲得通過UI自動化訪問ACCESSKEY?謝謝。

+0

是不是有一個名爲 「ShortcutKeys」 財產? – BakaBoing

+0

所有屬性都在第二個屏幕截圖上。沒有這樣的財產。 –

回答

1

爲ToolStrip的實物菜單的默認實現只支持助記符。因此,例如,如果你聲明你的菜單爲"&help",而不是"help",UI自動化應該顯示"Alt+h"作爲訪問鍵該菜單項。此實現只是不與其他類型的快捷方式,如Fx的,CTRL東西,等工作

如果您有自己的檢查應用程序,你可以拿出自定義訪問密鑰字符串。例如,下面是從ToolStripMenuItem派生並返回了什麼(缺省情況下是空,甚至定義ShortcutKeys)在ShortcutKeyDisplayString的標本類。

這是你如何使用它:

MyItem item = new MyItem("Help"); 
item.ShortcutKeys = Keys.F1; 
item.ShortcutKeyDisplayString = "F1"; 
fileToolStripMenuItem.DropDownItems.Add(item); 

這裏是樣品等級:

public class MyItem : ToolStripMenuItem 
{ 
    public MyItem(string text) 
     : base(text) 
    { 
    } 

    protected override AccessibleObject CreateAccessibilityInstance() 
    { 
     return new MyAccessibleItem(this); 
    } 

    // unfortunately we can't just derive from ToolStripMenuItemAccessibleObject 
    // which is stupidly marked as internal... 
    private class MyAccessibleItem : ToolStripDropDownItemAccessibleObject 
    { 
     public MyAccessibleItem(ToolStripMenuItem owner) 
      :base(owner) 
     { 
      Owner = owner; 
     } 

     public ToolStripMenuItem Owner { get; private set; } 

     public override AccessibleStates State 
     { 
      get 
      { 
       if (!Owner.Enabled) 
        return base.State; 

       AccessibleStates state = base.State; 
       if ((state & AccessibleStates.Pressed) == AccessibleStates.Pressed) 
       { 
        state &= ~AccessibleStates.Pressed; 
       } 

       if (Owner.Checked) 
       { 
        state |= AccessibleStates.Checked; 
       } 
       return state; 
      } 
     } 

     public override string KeyboardShortcut 
     { 
      get 
      { 
       return Owner.ShortcutKeyDisplayString; 
      } 
     } 
    } 
} 
+0

謝謝。但是我將同時使用AccessKey - H(&help)和acceleratorKey(F1)。在建議的例子中,acceleratorKey仍然是空字符串。 –

相關問題