C#のプログラミングにて不正な動きをして困っております。
ご存知の方に教えていただきたく思います。
稚拙な質問かも知れませんがご容赦のほど。
【要求】
画面の×ボタン、もしくは終了ボタンが押された時に
確認メッセージを表示して「いいえ」が押されたらフォームを閉じないようにしたいということです。
【構造・実装】
画面構造は、親画面と子画面があり、子画面はモーダルで表示しています。この子画面にFormClosingのイベントを付加しています。
【現象】
(1)親画面起動→終了ボタン押下→メッセージなしで終了
(2)親画面起動→子画面起動→子画面終了ボタン押下→メッセージ表示
→親画面終了ボタン押下→メッセージ表示
なぜか、子画面に付加したイベントが親画面にも引き継がれているようです。
理由と対処方法をご存知の方がいらっしゃいましたらご教授願います。
No.3ベストアンサー
- 回答日時:
ごめんなさい m(__)m ANo.2 の内容は誤りです
とんだ勘違いをしていたようです ・・・
AddOwnedFormの引数は『所有される側のフォーム』でした
ですからこの場合 subFrom が引数になればいいのです
ならばどうして最初の ShowDialogを行った際に親フォームを閉じるときにもsubForm_FormClosingが呼ばれたかといいますと
モーダルで表示したオブジェクト変数を Dispose()で明示的に破棄しなかったのが原因です
隠れたオブジェクトが アプリの中に潜在していて アプリが終了する際に subFormが閉じられようとして メッセージボックスが顕在化したのでしょう
subform_FormCloingの引数eのCloseReasonプロパティでどのような要因でフォームが閉じられようとしているのかを判断しましょう
単純にはsubFromのVisibleプロパティのチェックだけでもよさそうですが
>モーダルで表示したオブジェクト変数を Dispose()で明示的に破棄しなかったのが原因です
教えて頂いた原因がすごい納得致しました!!!!
この度は何度もお手を煩わせてしまいまして申し訳ありませんでした。
ありがとうございました。m(_ _)m
No.2
- 回答日時:
AddOwnedFormの使い方が間違ってますね
AddOwnedFormの引数は 所有者 であった 所有される側ではありません
今回の場合
this.AddOwnedForm( f );
と記述していますので f(子)に所有されるthis(親) となってしまいます
本来は親が子を所有するといった関係にしないといけません
この回答への補足
ということは、
記載を逆にすればいいのかと認識して
f.AddOwnedForm(this)と記載してみたんですが、
ArgumentExcepiton「コントロールの循環参照が発生しました。コントロールはそれ自体を所有したり、その親になることはできません。」
が発生してしまいました。
なにか、記載方法が間違っているということでしょうか。
何度も申し訳ありません。
No.1
- 回答日時:
どこにどのようなコードを記述したのかを明示しましょう
Closingイベントを処理するのは子画面の方なのでしょうか
子画面側にしかClosingイベントの記述が無いのに親画面側でも確認用のMessageBoxが表示されるということですか
このMessageBoxは子画面クラスに記述されたコードで実行されるのでしょうか
デバッグ時に 呼び出し履歴などは確認なさったのでしょうか
現象の再現する最小限の手順をお示しください
この回答への補足
>どこにどのようなコードを記述したのかを明示しましょう
おっしゃるとおりですね。
親クラスは、
subForm f = new subForm()
this.AddOwnerdForm(f);
f.ShowDialog(this);
で呼び出しています。
子クラスは、
Designer.csの部分にFormClosingを追加しています。
>Closingイベントを処理するのは子画面の方なのでしょうか
そのとおりです。
>子画面側にしかClosingイベントの記述が無いのに親画面側でも確認用のMessageBoxが表示されるということですか
そのとおりです。
>このMessageBoxは子画面クラスに記述されたコードで実行されるのでしょうか
そのとおりです。
質問した後いろいろやってみたのですが、
AddOwnerdForm()をコメントアウトすると問題なく動作致しました。
もともとモーダル表示をするためにいろいろ調べて、やってたのですが
ShowDialog()だけで事足りますね・・・。
ただ、AddOwnerdForm()をすると子画面に追加したイベントが
そのまま親に引き継がれるっていうのはいまいち納得ができません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- gooブログ Twitterの動画画面をgooブログに埋め込めない 4 2022/06/03 16:40
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- Java Javaプログラミングの質問になります。 ボタンを押下した時に画面遷移して 画面から戻ってきた時のi 1 2023/06/26 07:50
- その他(パソコン・周辺機器) アイ・オー・データ ビデオキャプチャー GV-USB2で録画できない 0 2023/01/09 14:57
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- Windows Me・NT・2000 パソコン終了 4 2022/05/09 09:05
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- オンラインゲーム PCのオンラインゲームが急に重くなった 4 2022/10/11 05:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java-jspの画面入力値保持について
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
ASP.NET 画面遷移前の状態を保...
-
遷移元を判定したい!
-
ServletからHTMLページへの遷移...
-
ServletからServletへの値渡し
-
画面を隠す・消す方法を教えて...
-
リンク先として、ページの途中...
-
JAVAのセッション変数の上書き...
-
【JSP】input typeで入力された...
-
thickboxでの画像表示位置について
-
Sessionがnullになりません。
-
画像の縦横比固定の計算方法。
-
strutsで、JSP→アクションクラ...
-
登録後、呼び出し元ページに戻...
-
FormのsubmitでFormの内容がnull
-
HTMLをC#で操作したい
-
javaでプリントスクリーン(ス...
-
VC++にて、コンソールを二画面表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java-jspの画面入力値保持について
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
ServletからServletへの値渡し
-
プログラミングで例えばゲーム...
-
C# ログイン画面からメイン画面...
-
遷移元を判定したい!
-
ASP.NET 画面遷移前の状態を保...
-
画面を隠す・消す方法を教えて...
-
ブラウザアドレスバーからのURL...
-
FormのsubmitでFormの内容がnull
-
ServletからHTMLページへの遷移...
-
Javaプログラミングの質問にな...
-
画像の縦横比固定の計算方法。
-
JAVAのセッション変数の上書き...
-
登録後、呼び出し元ページに戻...
-
Wi-Fiのパスワードが指定なしと...
-
system("cls")について
-
Beautiful Soupのインストール...
-
アドレスバーに引数を表示させ...
おすすめ情報