I'm having a problem in keeping the Parent Form to be opened till I close after using ShowDialog() .
I've been trying regarding this but couldn't get. I think there is something simple that I might have been missing. Can you please help me reg this?
The problem is, I have Form 1, on pressing one button, Form 2 opens. I do some validations in Form 2, and check for the validations. If the validation doesn't pass, I open a DialogBox form, with Retry and Cancel. If I press Retry, The control should go back to the Form 2 and form 2 should not close. If the press Cancel, both the DialogBox form and the Form 2 should close. Right now, regardless of what I press, both the forms close.
I have looked online and couldn't find any solution. Went through this solution, but both the forms are still closing for me. Why does closing a nested child dialog also close the parent dialog?
My code:(Sample example scenario)
Form 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
}
}
Form 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();
}
}
in Form2.cs do your validation and then
(assuming validationOK is the true/false result of your checks)
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;
}