如何获取当前活动模态表单的引用?

时间:2009-07-14 17:26:02

标签: c# .net winforms

我正在编写一个小类来驱动win表单应用程序的集成测试。测试驱动程序类可以访问主Form,并查找需要按名称使用的控件,并使用它来驱动测试。要查找控件,我将遍历Control.Controls树。但是,当我想在对话框窗口(显示为对话框的自定义窗体)中获得控件时,我会陷入困境。我该如何掌握它?

3 个答案:

答案 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完成处理之前不会将控制权返回给应用程序(或您的测试类) ,在这种情况下,您的用户代码将继续在其路径上。

尝试从单独的线程访问或操作控件(在这种情况下,重构测试驱动程序类,为每个必须显示和测试的新表单生成一个单独的线程。)