- PR -

ShowDialogと最小化ボタンについて

1
投稿者投稿内容
S.T
会議室デビュー日: 2007/02/01
投稿数: 3
投稿日時: 2007-02-01 20:28
凄い単純な質問かもしれないのですが、御存知の方がいたら回答をお願いします。

WindowsXP環境のVB2005で以下のようなコードを書いて
複数のフォーム(3個以上)をモーダル表示した後に『最小化ボタン』を押して
タスクバーに最小化をしたとします。
(例:タスクバーに『Frm1』『Frm1'』『Frm1''』みたいな状態

その後、タスクバーで真ん中のフォーム(例では『Frm1'』)を
選択すると選択したフォームが表示されるのですが最前面に来るはずの
フォーム(『Frm1''』)がタスクバーに残ってしまいます。

どうにかしてタスクバーで真ん中のフォーム(『Frm1'』)を選択した時に
(『Frm1''』)が最前面に来るように設定する方法はあるでしょうか?

マウスで最前面に来るはずのフォームをクリックすれば復帰するのは
分かっているのですがユーザーにわずらわしい操作や勘違いを
起こさせたくないと思って対応方法を考えています。

ShowDialogの引数でOwnerに親画面を引渡してあげてもダメでした。
また、タスクバーで最初の呼出しフォーム(『Frm1』)や
最後の呼出しフォーム(『Frm1''』)を選択した時は、
この問題は発生しません。

どなたか情報を御持ちでしたら助言を宜しくお願いします。


<問題のコード>
=====================
Public Class Frm1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim NewForm As New Frm1
NewForm.ShowDialog(Me)
End Sub

End Class
=====================
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-02-02 00:35
ShowInTaskbar を false にしてみるとかどうでしょう。
ShowDialog で開くならタスクバーにアイコンを増やす必要はないと思いますし。
_________________
かるあ のメモスニペット
S.T
会議室デビュー日: 2007/02/01
投稿数: 3
投稿日時: 2007-02-02 11:15
かるあさん回答ありがとうございます。

やはり、ShowInTaskbar を false にする方法しかないですかね。
デザインの問題で、出来ればタスクバーにアイコンを表示するように
設定したかったのですが、もう少し他の方法も考えてみたいと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-02 11:52
引用:

S.Tさんの書き込み (2007-02-02 11:15) より:

やはり、ShowInTaskbar を false にする方法しかないですかね。


かるあさんが書いているのは回避策であって、方法がないというものではないでしょう。

たとえば、Frm' が Frm'' の死活管理をしていれば何とでもできます。
Frm' の Activated イベントで Frm'' が生きていれば、WindowState を Normal にします。
ただし、この場合 Frm' の再描画が必要になるかと思います。

# ところで、この現象は不具合ではないかと考えています。
# タスク バーの Frm もしくは Frm'' から、元に戻した場合は意図したとおりに動きます。
# Frm' から元に戻した場合のみ、意図したとおりに動作しないのは妙です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
S.T
会議室デビュー日: 2007/02/01
投稿数: 3
投稿日時: 2007-02-05 09:18
じゃんぬねっとさん情報ありがとうございます。

不具合ですか、マイクロソフトのサポート技術情報を
調べてみましたが該当の記述はありませんでした。
一度は、サポートに問合せをするべきなんですかね?
(インシデントを消費してしまうとチョッと問題ですが・・・)

親画面から子画面の死活監視という方法はプログラム間の
結合度が高くなってしまうので出来れば避けたいと思ってます。

タスクバーのアイコンを一つにする方針で修正を考えていきます。
1

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