如何使用UIAutomation带来MDI子窗口的设置焦点

时间:2010-04-26 04:13:36

标签: c# ui-automation

我们有一个旧的遗留应用程序,我们需要自动化。 它使用MDI Windows。

我们正在使用UIAutomation,我可以成功为每个MDI子窗口获取相应的AutomationElement。 我不能做的就是把这个元素放在焦点上。

以下是我尝试过的一些示例代码:

        var desktop = AutomationElement.RootElement;
        var dolphin = desktop.FindFirst(TreeScope.Children,
                new PropertyCondition(AutomationElement.NameProperty,
                    "Dolphin for Windows",
                    PropertyConditionFlags.IgnoreCase));
        dolphin.SetFocus();

        var workspace = dolphin.FindFirst(TreeScope.Children,
                new PropertyCondition(AutomationElement.NameProperty,
                    "Workspace",
                    PropertyConditionFlags.None));

        var childWindow = workspace.FindFirst(TreeScope.Children, new
                PropertyCondition(AutomationElement.NameProperty, "Sharp   "));
        childWindow.SetFocus();

此代码中的最后一行因System.InvalidOperationException

而失败

试验,我尝试在childWindow上找到一个控件,并在其上调用SetFocus。它DID正确地将焦点设置在右侧控件上,但它没有将MDI窗口置于前台。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在设置焦点之前,您是否尝试过“BringToFront”?我可以想象顶级控件(mdi-parent)不允许专注于孩子,或者当孩子(mdi-child)不可见时无法这样做。