[英]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()
是不可取的,因为它不等待窗口关闭才能继续。 (此外……它不起作用。)ShowDialog()
策略以前确实有效。 (是的,我直接复制了该工作代码。)尽管我尽量避免构建使用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.