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