投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/12/13 14:26:06
> ここまではよろしいでしょうか?
理解できている前提で、続けていきます。


> (2) その後、そのフォームの DialogResult が None 以外に設定された場合、
>   次のアイドル時にそのフォームは(Close を呼んだり×を押したりせずとも)閉じられます。

ShowDialog で表示された Form の DialogResult プロパティの値が変更される主な要因としては、
 🔹Me.DialogResult を直接書き換えた
 🔹Button1.DialogResult が 非 None なボタンのクリック操作が行われた
の 2 パターンです。これに加えて、下記のようなパターンでも変化します。

★現在値が None の状態で下記が行われると Cancel になり、ダイアログは閉じられます。
 🔹ユーザーが右上の閉じるボタン「×」を押す
 🔹タスクマネージャーから、そのウィンドウが閉じられる
 🔹そのダイアログの Close メソッドを呼び出す
 🔹そのダイアログの Hide メソッドを呼び出す
 🔹そのダイアログの Visible プロパティが False に変更される

★フォームが閉じられる前に下記の動作が行われると、DialogResult が非 None から None に戻り、閉じる動作がキャンセルされます。
 🔹Closing イベント/ FormClosing イベントで e.Cancel が True に変更された
 🔹OnClosing メソッド/ OnFormClosing メソッドで e.Cancel が True に変更された
 🔹フォームの DialogResult プロパティに None が設定された
 🔸「次のアイドル状態に入る前」に、DialogResult プロパティが None な Button の Click が呼び出された

そして最後の 🔸 マークの事象が、今回の原因に当たるというわけです。
説明箇所で不明な点があれば答えますので、
>> 当方浅学のため詳しくは解りませんが
と投げ出さないで欲しいかな…。


> If e.KeyCode = Keys.Return Or e.KeyCode = Keys.Tab Or e.KeyCode = Keys.Enter Then
あとこれ、正しくは Or ではなく OrElse ですね。