我在使用ShowDialog()后关闭父窗体直到关闭时遇到问题。
我一直在尝试这个,但无法得到。我认为我可能会遗漏一些简单的事情。你能帮我注意一下吗?
问题是, 我有表格1,按一个按钮,表格2打开。 我在表格2中做了一些验证,并检查验证。如果验证没有通过,我打开一个DialogBox表单,重试和取消。 如果我按重试,控件应返回到表格2,表格2不应该关闭。 如果按取消,DialogBox表单和表单2都应该关闭。现在,无论我按什么,表格都会关闭。
我看过网上找不到任何解决方案。通过这个解决方案,但两个表格仍然关闭我。 Why does closing a nested child dialog also close the parent dialog?
我的代码:(示例示例场景)
表格1:
private void button1_Click(object sender, EventArgs e)
{
Form2 testForm = new Form2();
DialogResult dialogResult = new DialogResult();
dialogResult = testForm.ShowDialog(this);
if(dialogResult == DialogResult.OK)
{
//Do something
}
}
表格2:
private void button1_Click(object sender, EventArgs e)
{
DialogResult validDataResult = MessageBox.Show("Invalid Data Entered. Please provide the correct data."
, "Data Management"
, MessageBoxButtons.RetryCancel);
if (validDataResult == DialogResult.Cancel)
{
this.Close();
}
}
答案 0 :(得分:1)
进行验证然后再进行 (假设validationOK是您支票的真/假结果)
if(validationOK == false)
{
// Ask retry or cancel to the user
if(DialogResult.Cancel == MessageBox.Show("Validation Fail", "Validation failed, press retry to do it againg", MessageBoxButtons.RetryCancel))
this.DialogResult.Cancel; // Set the dialog result on form2. This will close the form.
// if you have the validation done in a button_click event and that button has its
// property DialogResult set to something different than DialogResult.None, we need
// to block the form2 from closing itself.
// uncomment this code if the above comment is true
// else
// this.DialogResult = DialogResult.None;
}
答案 1 :(得分:0)
您必须先设置DialogResult
Form2
才能拨打this.Close()
。否则,它仍然是默认值。 (下面的代码只是猜测实际的双重关闭逻辑,因为你没有指定)
Form2.cs:
if (validDataResult == DialogResult.Cancel)
DialogResult = DialogResult.Cancel;
else
DialogResult = DialogResult.OK;
Close();
Form1.cs中:
if(dialogResult == DialogResult.OK)
{
Close();
}
else
{
//Do something
}