前提
C#でメッセージダイアログを用いての選択肢(主にソフト終了するか、入力内容をリセットするかなど)でいいえを押すといいえにはプログラムを記入していないのに勝手に閉じられてしまう。
どう対処したらいいのかよくわからず困っています。
対処法や原因を知っている方いましたら教えてほしいです。
実現したいこと
- 「いいえ」を押してもフォームが閉じられるのを防ぐ。
発生している問題
主に子フォームで起こっています。親フォーム(閉じるとアプリが終了するフォーム)はまだ観測してません。
親フォーム
C#
1 private void button1_Click(object sender, EventArgs e) 2 { 3 Form2 add = new Form2(); 4 add.ShowDialog(); 5 }
子フォーム
C#
1 private void button1_Click(object sender, EventArgs e) 2 { 3 DialogResult = MessageBox.Show("test", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 4 if (DialogResult == DialogResult.Yes) 5 { 6 //特に記入なし。 7 } 8 else 9 { 10 goto A;//閉じられてしまう。 11 } 12 A:; 13 }
静的フィールドなし。このイベント以外は作っていません。
いいえを押すとフォームが閉じられてしまう。
2022/07/29 15:41 追記 「はい」のプログラムに何も入力しなくても閉じられてしまう。
2022/07/29 15:52 追記 コードの追加
該当のソースコード
該当する箇所が多すぎるので発生している問題を参照してください。
試したこと
goto を使ってif文の終わりに設置したりしたら閉じられることはなかったけどやたら使うとコードが読みにくくなるのであまり使いたくない2022/07/29 15:41 追記 これも閉じられてしまう。
補足情報(FW/ツールのバージョンなど)
VisualStudio 2022
提示されたソースをどこに書いているのですか?
またDialogResultに格納して、diarogresultで比較していますがこれは正しいですか?
掲示されたソースはボタンクリックのイベントに使っています。
DialogResult>>>すみません。誤字なので修正します。
DialogResult プロパティ自体にフォームをクローズする副作用があるので、dialogResult に変えれば良さそうです。
副作用>>>なるほど、試してみます。
「はい」だろうが「いいえ」だろうがプログラムの流れ、結果的にフォームをClose()しているのではないですか。周辺のコードを提示しましょう。質問文中に追記、修正のかたちで示してください。
dialogResultに変えましたがコーディング段階でエラーを吐いてしまいます。こちらはプロパティではなくintやstringなどの変数でしょうか?
追記修正>>>親フォームと同時に現在のコードを追記します。
あ、なるほど、DialogResultプロパティそのものでしたか。
ローカル変数を宣言するんですよ。
var dialogResult = MessageBox.Show("選択肢", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
なるほど、ローカルですね。コーディングしてみます。
無事コーディングできました。ありがとうございます

回答1件
あなたの回答
tips
プレビュー