Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MS UI自动化WinForms:Can';在UIA自动化树上找不到网格字段选择器窗口_C#_.net_Winforms_Ui Automation_Microsoft Ui Automation - Fatal编程技术网

C# MS UI自动化WinForms:Can';在UIA自动化树上找不到网格字段选择器窗口

C# MS UI自动化WinForms:Can';在UIA自动化树上找不到网格字段选择器窗口,c#,.net,winforms,ui-automation,microsoft-ui-automation,C#,.net,Winforms,Ui Automation,Microsoft Ui Automation,我们有一个Infragistics UltraGrid控件,您可以显示该网格的字段选择器窗口 但是,字段选择器不会显示在UIA自动化树上。如果我尝试以编程方式搜索它,那么UIA找不到它,如果我尝试使用UIA验证手动查找它,也是如此 但是如果我使用UIA验证悬停/焦点模式来查找字段选择器,那么它会显示它,并且以与网格控件相同的形式显示它 如何使用代码查找控件?为什么它不显示在自动化树上?它是基础设施。某些组件(如ultratree、ultragrid等)在对象树上的位置顺序不正确 可能的解决

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

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

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


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

它是基础设施。某些组件(如ultratree、ultragrid等)在对象树上的位置顺序不正确

可能的解决方案:

  • 尝试从应用程序窗口的根目录中查找控件
  • 模拟鼠标和键盘动作
  • 以AutomationElement.FocusedElement的形式获取控件,然后遍历父元素

这似乎是.NET framework中与从MDI子表单创建的表单相关的错误。作为一种变通方法,我已经能够使用AutomationElement.FromPoint()函数

引用盖伊·巴克(微软)的话:

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

有趣的是,当我查看所属形式的祖先时,它将MDI子窗体列为父级。但是由于某种原因,MDI子窗体不认为拥有的表单是其子之一。


对于如何解决这个问题,我目前没有任何建议,但如果我发现了什么,我会在这里发表评论。”

它有AutomationID道具吗?嵌套有多深?它是否具有与其他控件相同的controlname、controlid或名称?是的,如果我通过悬停/聚焦模式找到它,它将显示为“正常”。它有ControlType.Window、AutomationId=“ColumnChooserDialog”、Name=“Orders-FieldChooser”。但是如果我搜索那些属性,它不会找到它。。。我对父窗体做了一个FindAll,然后查看它没有显示的子窗体。这听起来像是一个容器窗口。实际控制可能在该窗口下。父窗体-->容器窗口-->控件我添加了一些图像。。。第一个问题是它在UIA Verify和代码中的正常显示方式-字段选择器不会显示在自动化树上。第二个显示在我在UIA Verify中使用悬停/聚焦模式找到它之后,它确实出现在树上。这可能意味着您需要在父窗体上触发用户(交互)操作(鼠标、键盘、单击、悬停等),以便可以创建字段选择器窗口(或通过Infrastics代码为其创建父窗口,该代码将对此操作作出反应,如果它已经存在于其他地方)。没有简单的重新编程代码,很难提供更多帮助