Nem kell ennyire elbonyolítani: adott egy form, amit modálisan jelenítesz meg (nevezzük ModalForm-nak). Van rajta egy OK és egy Mégse gomb. A mégse gombnak fixen beállíthatod a DialogResult property-jét DialogResult.Cancel-re, az OK gomb esetén pedig a gomb Click eseménykezelőjében állítod be a form DialogResult-ját (this.DialogResult = ...; ) a feltételektől függően (amit a ShowDialog() metódusodban akartál megcsinálni). Nem kell felüldefiniálni a ShowDialog() metódust.
Ott, ahol a ModalForm-ot meg akarod jeleníteni, példányosítod, meghívod rajta a ShowDialog()-ot, és az eredmény alapján folytatod a futást.
Példa project két perc alatt:
ModalForm, rajta 1 checkbox (checkBox1), OK gomb (btnOK), Mégse gomb (btnCancel). OK gomb eseménykezelőjében egy sor:
this.DialogResult = checkBox1.Checked ? DialogResult.OK : DialogResult.Cancel;
A ModalForm tulajdonságaiban beállítod az AcceptButton és Cancel button értékeket a megfelelő gombokra, a btnCancel DialogResult tulajdonságát DialogResult.Cancel-re.
A hívó formra felteszel egy gombot, aminek az eseménykezelőjében ez van:
using (var modalForm = new ModelForm()) MessageBox.Show(modalForm.ShowDialog().ToString());