繁体   English   中英

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

[英]Form.ShowDialog() does not display window with debugging enabled

我在单元测试项目中创建了一个测试,我想在其中使用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()策略以前确实有效。 (是的,我直接复制了该工作代码。)
  • 我的问题与类似,但是,我的表单不是另一个对话框的子级,也不存在于父级 UI 线程中。

尽管我尽量避免构建使用System.Windows.Forms单元测试,但我遇到了一个奇怪的情况,我也需要它并通过处理Load事件并显式设置Visible = true来解决它。 当从测试方法调用 ShowDialog 时,这会强制窗体可见。

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

或者,只需从您的测试方法中观察表单实例,然后在那里执行相同的操作。 至少这进一步缓解了这个问题,因为它使黑客远离了你的表单代码。

var frm = new Form1();
frm.Load += (sender, e) => (sender as Form1).Visible = true;
frm.ShowDialog();

就我而言,使用 VS2017,将属性ShowInTaskbar设置为false就成功了。

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

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

PS找到这个之后,我在单元测试方法显示Windows窗体中看到了相同的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM