ShowDialog – Auto close or stopping the close
I have come across this issue recently and decided to post something on it. I also found a few posts on the internet on it, but to me, they never really explained it properly. Not to mention that the solution is pretty simple, but I find often the more complex the problem the easier it can be to find the solution, that the simpler ones could take longer not because they are hard but because it is so simple, not to mention it is staring you in the face and you can’t seem to see it. So this is why I am posting it.
I have a dialog;
There is it. I used to have the property DialogResult automatically set to DialogResult.Cancel and DialogResult.OK for the buttons. When using the ShowDialog method, clicking either of these buttons will close the dialog automatically, and return the result based on the button pressed.
The issue I came across was performing field validation on the Value field when clicking OK. But the message would show but the dialog would still close. I fixed this by,
- Removing the property values of DialogResult from the buttons. Setting them to None.
- Putting in the click events into each button the return of the dialog result.
Private Sub OKButton_Click(ByVal sender as System.Object, ByVal e as System.EventArgs) _ Handles OKButton.Click If ValidateValue() Then Me.DialogResult = DialogResult.OK End If End Sub Private Sub CancelButton_Click(ByVal sender as System.Object, ByVal e as System.EventArgs) _ Handles CancelButton.Click Me.DialogResult = DialogResult.Cancel End Sub
Then the code in the main form, would handle the result coming back. Note that in the OKButton that is ValidateValue is False then the dialog will stay there.
That is how I solved it, I hope this may come of use to anyone who was using ShowDialog for a form and has problems with it automatically closing when the buttons have the DialogResult property set to a value at design time.