首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UI自动化检查菜单项?

如何使用UI自动化检查菜单项?
EN

Stack Overflow用户
提问于 2013-10-10 21:52:59
回答 1查看 1.2K关注 0票数 3

我正在实施的行动,必须检查菜单项的内容。菜单项包含标题+快捷键(help F1)

但我遇到了检查菜单中是否有快捷键(F1)的问题。AutomationElement不包含有关此密钥的任何信息。AccessKey和AcceleratorKey为空。

如何通过UI自动化访问accessKey?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-10 22:56:09

ToolStrip类菜单的默认实现只支持助记符。因此,例如,如果您将菜单声明为"&help"而不是"help",UI自动化应该以"Alt+h"作为访问键显示此菜单项。这种实现方式不适用于其他类型的快捷键,如Fx、CTRL等等。

如果您拥有被检查的应用程序,则可以提出自定义的访问密钥字符串。例如,下面是一个示例类,它从ToolStripMenuItem派生并返回在ShortcutKeyDisplayString中设置的内容(注意,默认情况下它是null,即使定义了ShortcutKeys )。

你可以这样使用它:

代码语言:javascript
复制
MyItem item = new MyItem("Help");
item.ShortcutKeys = Keys.F1;
item.ShortcutKeyDisplayString = "F1";
fileToolStripMenuItem.DropDownItems.Add(item);

下面是示例类:

代码语言:javascript
复制
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;
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19297694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档