Form.ShowDialog()不显示启用调试的窗口

时间:2013-07-22 21:23:00

标签: c# .net winforms testing

我在单元测试项目中创建了一个测试,我希望在其中使用ShowDialog()函数弹出表单

[TestMethod]
public void TestDialog()
{
  // This class inherits from Form
  TestForm serviceTestForm = new TestForm("My test form"); 
  serviceTestForm.ShowDialog();

  return;
}

我希望此测试达到ShowDialog(),并且无限期地运行,直到我关闭窗口。但是,当我“使用调试”运行此测试时,测试到达ShowDialog(),并且不显示任何表单。奇怪的是,如果我运行“没有调试”,这个完全相同的测试可以

我需要能够“通过调试”运行测试并显示窗口。

其他说明:

  • Show()是不可取的,因为它不会等待窗口关闭继续。 (除此之外......它不起作用。)
  • 此代码之前曾在另一个使用.NET 3.5的项目中运行过。这只是说ShowDialog()战略以前肯定有效。 (是的,我直接复制了工作代码。)
  • 我的问题类似于this one,但是,我的表单不是另一个对话框的子项,并且不在父UI线程中。

2 个答案:

答案 0 :(得分:31)

尽管我试图避免构建使用System.Windows.Forms的单元测试,但我遇到了一个奇怪的情况,我也需要这个,并通过处理Load事件并明确设置{{ 1}}。当从测试方法调用ShowDialog时,这会强制表单可见。

Visible = true

或者,只需从测试方法中观察表单实例,然后在那里执行相同的操作。至少这可以进一步减轻这个问题,因为它可以防止黑客攻击你的表单代码。

private void form1_Load(object sender, EventArgs e)
{
    // To support calling ShowDialog from test method...
    this.Visible = true;
    ...
}

答案 1 :(得分:0)

就我而言,使用VS2017,将属性ShowInTaskbar设置为false可以解决问题。

这是用于显示对话框的完整代码:

form.TopMost = true;
form.StartPosition = FormStartPosition.CenterScreen;
form.ShowInTaskbar = false;
form.ShowDialog();

P.S。找到这个之后,我在Displaying Windows Forms inside unit test methods

中看到了相同的解决方案