MS UI Automation WinForms:无法在UIA自动化树上找到网格字段选择器窗口

时间:2016-02-04 14:36:04

标签: c# .net winforms ui-automation microsoft-ui-automation

我们有一个Infragistics UltraGrid控件,您可以显示该网格的字段选择器窗口。

Field chooser shown

但是,现场选择器不会显示在UIA自动化树上。如果我尝试以编程方式搜索它,那么UIA找不到它,如果我尝试使用UIA验证手动查找它。

Automation tree doesnt show field chooser

但是如果我使用UIA验证悬停/聚焦模式来查找字段选择器,那么它会显示它,并以与网格控件相同的形式显示它。

enter image description here

如何使用代码找到控件?为什么它不会显示在自动化树上?

2 个答案:

答案 0 :(得分:1)

这似乎是.NET框架中与从MDI子窗体创建的窗体相关的错误。作为一种解决方法,我已经能够使用AutomationElement.FromPoint()函数。

Microsoft forum link

来自Guy Barker(微软)的引言:

"我可以重现您所看到的问题。我将main设置为mdi容器,并创建了一个子窗体,其MdiParent是主窗体。然后我添加了原始拥有的表单,由mdi子表单拥有。当我这样做时,我可以在Inspect中获取所拥有的表单的详细信息,但该表单没有出现在UIA树视图中。

有趣的是,当我查看自有表单的祖先时,它会将mdi子表单列为预期的父表单。但由于某种原因,mdi子形式并不认为拥有的形式是其子女之一。

我目前没有任何关于如何解决这个问题的建议,但如果我找到了什么,我会在这里发表评论。"

答案 1 :(得分:0)

它是虚无主义的。某些组件(如ultratree,ultragrid等)在对象树上的位置不正确。

可能的解决方案:

  • 尝试从应用程序窗口的 root 中找到您的控件。
  • 模拟鼠标和键盘操作。
  • AutomationElement.FocusedElement 获取控件,然后浏览元素parent