you will get improved behavior by using
popup.ShowDialog(this);
which gives ownership of the child form to the parent form, creating a stronger relationship between both forms.
BTW: whether to call Dispose() or not should not depend on the return value!
And then, a better way to call Dispose() automatically is by using a using statement, as in:
private void button_Click(object sender, EventArgs e) {
using (ChildForm popup = new ChildForm()) {
DialogResult dialogresult = popup.ShowDialog(this);
if (dialogresult == DialogResult.OK) {
...
}
}
}
This will always dispose of the ChildForm when you leave the using block, even when an Exception gets thrown.
:)