- PR -

「グループごと閉じる」を無効にしたい

1
投稿者投稿内容
田子庄左衛門
会議室デビュー日: 2003/06/10
投稿数: 5
投稿日時: 2007-02-15 14:46
はじめまして。

タスクバー上にグループ化されたウィンドウは、「グループごと閉じる」
によって一括して閉じることができますが、これを無効にする方法がないか
調べております。

現在 VB2005 を使って Windows アプリの開発を行っております。
このアプリ、「終了するときは、必ず画面上の閉じるボタンを使うこと」
という標準仕様があります。これを実現するため、ウィンドウの×ボタン
を無効にするコードを記述しました。
(@IT の下記の記事を参考にしました)
http://www.atmarkit.co.jp/fdotnet/dotnettips/142closebtn/closebtn.html

これにより、タスクバー上のボタンを右クリックして、閉じるを選択する
こともできなくなり、要件を実現できたように見えました。
(Alt + F4 で閉じられますが、これはOK)

しかし、「同様のタスクバーボタンをグループ化する」の設定を ON に
した場合、「グループごと閉じる」は有効になってしまい、これによって
複数のウィンドウをいっぺんに閉じてしまうことが可能です。

この「グループごと閉じる」の機能を無効にしたいのですが、これを
実現するにはどのような方法があるのでしょうか。ControlBox = False を
試してみましたが、うまくいきませんでした。ご存知の方がいらっしゃいま
したら、ご教示願いたいと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-15 17:31
引用:

田子庄左衛門さんの書き込み (2007-02-15 14:46) より:

しかし、「同様のタスクバーボタンをグループ化する」の設定を ON にした場合、「グループごと閉じる」は有効になってしまい、これによって複数のウィンドウをいっぺんに閉じてしまうことが可能です。

この「グループごと閉じる」の機能を無効にしたいのですが、


アプリケーション側で、閉じられる原因 (CloseReason) を見て、
特定の条件下以外キャンセルしてしまうのが最も楽な手段だと思います。

# 一応ですが、プロセス自体を落とされた場合や、ユーザビリティを考えると、
# 現状の仕様自体がお勧めできないということも申し上げておきます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
田子庄左衛門
会議室デビュー日: 2003/06/10
投稿数: 5
投稿日時: 2007-02-16 10:42
じゃんぬねっとさん、ご返答ありがとうございます。

FormClosing イベントを拾って、CloseReason の値を確認してみました。
ですが、コード上から Me.Close() を呼び出した場合と、「グループごと閉じる」
を行った場合、どちらも同じ値(UserClosing)が取れるようで、区別することが
できませんでした。

> 一応ですが、プロセス自体を落とされた場合や、ユーザビリティを考えると、
> 現状の仕様自体がお勧めできないということも申し上げておきます。

これはおっしゃるとおりで、私も Windows の仕様に反抗するようなアプリは
嫌なのですが、お客様と直接交渉するような立場でもなく、その通りに作る
しかないのです…。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-16 10:53
引用:

田子庄左衛門さんの書き込み (2007-02-16 10:42) より:

FormClosing イベントを拾って、CloseReason の値を確認してみました。
ですが、コード上から Me.Close() を呼び出した場合と、「グループごと閉じる」
を行った場合、どちらも同じ値(UserClosing)が取れるようで、区別することができませんでした。


確かに CloseReason だけでは判断できないですね。
ただ、Form.Close メソッドを呼び出す場合には、何かしろ識別できるものを別途用意すれば可能ですよね。

引用:

これはおっしゃるとおりで、私も Windows の仕様に反抗するようなアプリは嫌なのですが、お客様と直接交渉するような立場でもなく、その通りに作るしかないのです…。


このあたりは私も経験ありなので "一応" と書かせて頂きました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
田子庄左衛門
会議室デビュー日: 2003/06/10
投稿数: 5
投稿日時: 2007-02-16 11:54
引用:

確かに CloseReason だけでは判断できないですね。
ただ、Form.Close メソッドを呼び出す場合には、何かしろ識別できるものを別途用意すれば可能ですよね。



そうですね。アプリが許可する閉じる操作が行われたのかどうかを示す
フラグ等を用意して、それで判断するような仕組みにしようかと思います。

ご助言くださいまして、ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-16 22:47
 経験から意見させていただくと、

「発注したお客様」と、「実際に使うお客様」が違う場合、
「発注したお客様」の勝手な思いこみが「実際に使うお客様」の希望と食い違い、
「実際に使うお客様」から非難されることになります(--;)

_________________
1

スキルアップ/キャリアアップ(JOB@IT)