DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MDI親フォームで一括終了

環境/言語:[VB2005]
分類:[.NET]


MDIで親フォーム(Form1)子フォーム(Form2)を作成し、親フォームの×ボタンで一括終了しようと思っているのですが、VBの仕様だと思うのですが、子フォームから終了してしまいます。

そこで親であるForm1を選択した場合のみフラグを立てて、終了させようと思っていて、(gotfoucus)(lostfoucus)などを使用しているのですがうまく選択できません。

だれかご教授願えませんでしょうか?
よろしくお願いします。
■No23502に返信(yanagimotoさんの記事)
> MDIで親フォーム(Form1)子フォーム(Form2)を作成し、親フォームの×ボタンで一括終了しようと思っているのですが、
> VBの仕様だと思うのですが、子フォームから終了してしまいます。

VB の仕様ではなく Windows の仕様だと思いますが。
この動作でもタイトルにある "一括終了" は満たしているので何が不満かがわかりません。

> そこで親であるForm1を選択した場合のみフラグを立てて、終了させようと思っていて、(gotfoucus)(lostfoucus)などを使用しているのですがうまく選択できません。

'u' が多いような... 正しくは GotFocus イベント、LostFocus イベントでしょうか。
(ちなみにこの 2 つのイベントは低水準なイベントであるので .NET では使用を推奨していません)

何をどうしようとしてこの 2 つを用いたのかを書かないと、真意を読み取るのは難しいですね。
■No23504に返信(じゃんぬねっとさんの記事)
> ■No23502に返信(yanagimotoさんの記事)
>>MDIで親フォーム(Form1)子フォーム(Form2)を作成し、親フォームの×ボタンで一括終了しようと思っているのですが、
>>VBの仕様だと思うのですが、子フォームから終了してしまいます。
>
> VB の仕様ではなく Windows の仕様だと思いますが。
> この動作でもタイトルにある "一括終了" は満たしているので何が不満かがわかりません。
>
>>そこで親であるForm1を選択した場合のみフラグを立てて、終了させようと思っていて、(gotfoucus)(lostfoucus)などを使用しているのですがうまく選択できません。
>
> 'u' が多いような... 正しくは GotFocus イベント、LostFocus イベントでしょうか。
> (ちなみにこの 2 つのイベントは低水準なイベントであるので .NET では使用を推奨していません)
>
> 何をどうしようとしてこの 2 つを用いたのかを書かないと、真意を読み取るのは難しいですね。

早速の返事ありがとうございます。
後、誤字すいません。。。

GotFocus イベント、LostFocus イベントを使用目的はForm1かForm2を選択したかを判定したいと思ったからです。
子フォームの終了イベントに終了メッセージを表示させているのですが、子フォームを単体を終了する際は問題ないのですが、親フォームで一括終了する際に子フォームのclosingイベントから発生するため、終了メッセージが子フォームの数だけ表示されてしまうのでこれを解消するために、form1、form2の判定を判定し一括終了させたいと思っています。

低水準イベントとはわかっているのですが、いい方法が他にわからないもので。。。
よろしくお願いします。
■No23505に返信(yanagimotoさんの記事)
>>> VBの仕様だと思うのですが、子フォームから終了してしまいます。
>> VB の仕様ではなく Windows の仕様だと思いますが。
> 終了メッセージを表示させているのですが

ちなみに VB2005 だと、
 子.FormClosing イベント
 親.FormClosing イベント
 子.FormClosed イベント
 親.FormClosed イベント
の順でイベントが発生しますが、VB6 だと
 親.QueryUnload イベント
 子.QueryUnload イベント
 子.Unload イベント
 親.Unload イベント
の順で発生したりします。

# 今回のケースでは、VB6 仕様の方が扱いやすいのだけど。

> GotFocus イベント、LostFocus イベントを使用目的は
> Form1かForm2を選択したかを判定したいと思ったからです。
選択? Form1 は MDI親フォーム、Form2 は子フォームでしたよね。

子フォームが表示されている状態で、親フォームの GotFocus が
発生するのは、稀なケースな気がしますが…どういう状況なのでしょうか?
(親フォーム上にあるコントロールの GotFocus の事では無いのですよね)

> 終了メッセージが子フォームの数だけ表示されてしまうので
終了メッセージの処理を、それぞれの子フォーム上に記述するのではなく、
子フォームのイベントを、親フォーム上で管理されてみては如何でしょうか。
その上で、最初の一回に対して終了メッセージを出力させれば良いかと。


> 低水準イベントとはわかっているのですが
目的にもよりますが、
 ActiveMdiChild プロパティ
 Activated イベント
 Enter イベント
とかかな…。

DOBON.NET | プログラミング道 | プログラミング掲示板