如何获取当前活动模态表单的引用?
我正在编写一个小类来驱动win表单应用程序的集成测试。 测试驱动程序类可以访问主窗体并查找需要按名称使用的控件,并使用它来驱动测试。 要查找控件,我将遍历Control.Controls树。 但是,当我想在对话框窗口(显示为对话框的自定义窗体)中获得控件时,我会陷入困境。 我该如何掌握它?
您可以使用静态Form.ActiveForm
属性获取对当前活动表单的引用。
编辑:如果没有Form
具有焦点, Form.ActiveForm
将返回null
。
解决此问题的一种方法是使用Application.OpenForms
集合并检索最后一项,当使用ShowDialog
显示时,将是活动Form
:
// using Linq: lastOpenedForm = Application.OpenForms.Cast
我不确定你是否可以访问预建对话框上的控件; 他们似乎都打包在一起。 您可以更幸运地构建一个自己的对话框来完成您希望它做的事情。 然后你可以访问它内部的.Controls。
如果我错了,请纠正我,但听起来好像你可能试图访问对话框表单上的控件时,这是不可能的。
我的意思是, ShowDialog
将“保持”创建表单的线程,并且不会将控制权返回给应用程序(或您的测试类),直到ShowDialog
完成处理,在这种情况下,您的用户代码将继续在其上路径。
尝试从单独的线程访问或操作控件(在这种情况下,重构测试驱动程序类,为每个必须显示和测试的新表单生成一个单独的线程)。