我正在執行必須檢查菜單項內容的操作。菜單項包含標題+快捷鍵(幫助F1)如何使用UI自動化檢查菜單項?
,但我已經遇到檢查是否有菜單快捷鍵(F1)的問題。 AutomationElement不包含任何有關此密鑰的信息。 AccessKey和AcceleratorKey是空的。
我怎樣才能獲得通過UI自動化訪問ACCESSKEY?謝謝。
我正在執行必須檢查菜單項內容的操作。菜單項包含標題+快捷鍵(幫助F1)如何使用UI自動化檢查菜單項?
,但我已經遇到檢查是否有菜單快捷鍵(F1)的問題。 AutomationElement不包含任何有關此密鑰的信息。 AccessKey和AcceleratorKey是空的。
我怎樣才能獲得通過UI自動化訪問ACCESSKEY?謝謝。
爲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;
}
}
}
}
謝謝。但是我將同時使用AccessKey - H(&help)和acceleratorKey(F1)。在建議的例子中,acceleratorKey仍然是空字符串。 –
是不是有一個名爲 「ShortcutKeys」 財產? – BakaBoing
所有屬性都在第二個屏幕截圖上。沒有這樣的財產。 –