WinForm窗口有时会在ShowDialog之后立即将其DialogResult变量设置为Cancel

时间:2016-06-15 16:58:59

标签: c# winforms

正如标题所说,我有一个WinForms窗口,有时会在DialogResult被调用后立即将Cancel属性设置为ShowDialog

窗口显示如下:

bool isSuccess = (ShowDialog() == System.Windows.Forms.DialogResult.OK);

现在大部分时间,DialogResult在首次实例化窗口时设置为None,应该如此。在这些情况下,窗口将保持打开/有效,直到DialogResult设置为None以外的其他内容。

我甚至将此功能更改为:

this.DialogResult = System.Windows.Forms.DialogResult.None;
bool isSuccess = (ShowDialog() == System.Windows.Forms.DialogResult.OK);

有时候,DialogResult会立即成为Cancel

当自动设置为DialogResult时,我的代码中没有任何地方可以随时随地设置或与Cancel属性进行交互。

此外,如果我在调用ShowDialog后立即在线上中断,则导致ShowDialog调用的整个堆栈跟踪相同 - 行换行。

鉴于实际上没有任何内容与DialogResult属性进行交互,我完全不知道如何阻止它。

1 个答案:

答案 0 :(得分:0)

你是怎么关闭窗户的?如果使用X关闭它,结果将自动设置为DialogResult.Cancel(请参阅here

  

当表单显示为模式对话框时,单击“关闭”按钮(表单右上角带有X的按钮)会导致隐藏表单并将DialogResult属性设置为DialogResult。取消。当用户单击对话框的“关闭”按钮或设置DialogResult属性的值时,不会自动调用Close方法。相反,表单是隐藏的,可以再次显示,而无需创建对话框的新实例。由于此行为,您必须在应用程序不再需要该表单时调用表单的Dispose方法。

编辑: 如果我理解正确,你还要提到它正常工作"当它第一次实例化时#34;。这是否意味着您在关闭后重新使用相同的表单?如果是这样,则不支持此功能。关闭后,您必须创建表单的新实例以再次显示它。