C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]:


(過去ログ 117 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■69082 / inTopicNo.1)  MDI子フォームのFormClosedイベントが発生しない
  
□投稿者/ ゆる (4回)-(2013/12/02(Mon) 19:37:01)

分類:[C#] 

VS2008 C# .NET3.5 Windows7 64bit

いつも勉強させて頂いています。

MDI親フォームをShowメソッドで開くと、
親フォームを閉じるときにMDI子フォームのFormClosedイベントが発生します。
しかしながらMDI親フォームをShowDialogメソッドで開くと、
親フォームを閉じるときにMDI子フォームのFormClosedイベントが発生しません。

これは仕様なのでしょうか?
また、ShowDialogでMDI親フォームを開いた場合でも、親フォームを閉じるときに
MDI子フォームのFormClosedイベントが発生するようにすることは可能でしょうか?

ご教示頂ければ幸いです。


引用返信 編集キー/
■69083 / inTopicNo.2)  Re[1]: MDI子フォームのFormClosedイベントが発生しない
□投稿者/ オショウ (100回)-(2013/12/02(Mon) 21:11:52)
> MDI子フォームのFormClosedイベントが発生するようにすることは可能でしょうか?

  FromClosedイベントで何かしているのですか?
  それによっては、回答が変わるかもしれません。

以上。
引用返信 編集キー/
■69084 / inTopicNo.3)  Re[2]: MDI子フォームのFormClosedイベントが発生しない
□投稿者/ ゆる (6回)-(2013/12/02(Mon) 21:30:22)
>   FromClosedイベントで何かしているのですか?
>   それによっては、回答が変わるかもしれません。

オショウさん返信ありがとうございます。
FormClosedイベントでは、
ウインドウサイズやコンボボックスの選択肢などの情報をxmlファイルに保持する処理を呼んでいます。
(Load時にそのxmlファイルを読み込んで、前回終了時の状況を再現しています。)

また、MDI子フォームより派生して開くフォーム(入力IFなど)が開いていれば閉じる、
といった処理を呼んでいる子フォームもあります。

そもそも、
何故親フォームがShowDialogだと子フォームのFormClosedイベントが発生しないのかが理解できず…。


引用返信 編集キー/
■69085 / inTopicNo.4)  Re[3]:
□投稿者/ Azulean (248回)-(2013/12/02(Mon) 22:17:09)
2013/12/02(Mon) 22:23:59 編集(投稿者)

No69084 (ゆる さん) に返信
> そもそも、
> 何故親フォームがShowDialogだと子フォームのFormClosedイベントが発生しないのかが理解できず…。

仕様・不具合を判断するのは Microsoft だけだと思いますので、第三者としては「そのように実装されているから」としか答えようがないかと思います。
.NET 4 の System.Windows.Forms.dll の Form.cs によると、Modal 表示の場合は MDI 子フォームへの事前通知ループに入りません。
この挙動に関して不満がある場合は、サポートに問い合わせるか、Connect にリクエストを登録するかと言うことになります。


なお、即座に(= あなたのプログラムをリリースするまでに)この振る舞いが変わることはないと思われるので、現実的には自前でそういった処理を書くか、モーダル表示にするのをあきらめるかになると思います。
引用返信 編集キー/
■69086 / inTopicNo.5)  Re[4]:
□投稿者/ ゆる (7回)-(2013/12/02(Mon) 22:28:01)
Azuleanさん

回答ありがとうございます。

> .NET 4 の System.Windows.Forms.dll の Form.cs によると、Modal 表示の場合は MDI 子フォームへの事前通知ループに入りません。

なるほど、そういう仕様なのですね。すっきりしました。
それを踏まえて対応を検討してみようと思います。

ありがとうございました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -