より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

意外と奥が深いDialogResult

WinFormsのFormの仕様として、×で閉じると、DialogResultがCancelになります。Alt+F4で閉じても同様です。

docs.microsoft.com

FormのDialogResultの返り値を処理する場合は要注意です。

f:id:rimever:20210512084125p:plain

というわけで上記のようなものを作って動作確認してみました。

f:id:rimever:20210512084034p:plain
Formの×をクリックすると、MSDNの通りにDialogResult.Cancel

f:id:rimever:20210512083801p:plain
YesNoのDialogの場合は、×は押せない

f:id:rimever:20210512083838p:plain
Okダイアログは×がクリックできる。×をクリックしても結果はOk

f:id:rimever:20210512083928p:plain
OkCancelは×がクリックできる。クリックするとCancel。

というわけで、標準のMessageBoxはよくできていますね。

単純に×で DialogResult.Cancelではなく、不要にCancelが漏れないように制御しています。

なので、自前でDialogBoxをこさえるには要注意です。どこかの有力なリポジトリをフォークするか、単純に×をDisableにするなど考えておく必要があるでしょう。

Repository

github.com