- PR -

ShowDialogの動きについて(親画面のアクティブイベント)

1
投稿者投稿内容
Katsumi
会議室デビュー日: 2002/08/15
投稿数: 11
投稿日時: 2003-08-27 11:32
いつも本当にお世話になっています。
よろしくお願いします。

FormのShowDialogメソッドに不満があって、
この動きが、.NETの仕様なのかを知りたいのです。

不満な動き
 ・後ろの親フォームをクリックすると、
  一瞬、フォームがすべてアンアクティブになり、
  手前のフォームにフォーカスが戻ってくるように見える。
まぁ、ここはいいんです。実際にはイベントが走っていないので。


本当に不満な動き
 ・後ろの親フォームを、直接クリックするのでなくて、
  後ろの親フォームのタスクバーをクリックすることで選択すると、
  後ろの親フォームのアクティベイトイベントが走るので、
  モーダルフォームを表示している間はアクティベイトイベントが走らないという前提で
  コーディングするとおかしくなる。
 ・さらにこのとき、後ろの親フォームが後ろにいるままアクティブになり、
  手前のフォームにフォーカスが戻らない。


以下の簡単なソースで再現すると思います・・・

単純なフォームを3つ作っておきます。(Form1,Form2,Form3)
Form1から、Form2をShowDialogして、
Form2から、Form3をShowDialogしてるだけです。

つまり、Form1に配置したボタンで、下記を書いて

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


Form2に配置したボタンで、

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

とやっています。

実行後、Form3まで出し切ったところで、
Form2のタイトルバーをクリックします。このときは、いいんですが、
タスクバーでForm2をクリックすると、Form2のアクティベートメソッドが動きます。
(アクティベートにprivateな変数のa = a + 1とかやって、aを表示させることで確認しています)
そして、Form2のタイトルバーがアクティブな状態になります。

うまく伝わったでしょうか・・・?


つまり、dialogの親フォームは、モーダルなはずなのに
アクティブな状態になります。


これは、そういう仕様なのでしょうか?

ひょっとして、そもそも、
Dialogの先でDialogを出してはいけないのでしょうか?


よろしくお願いします。
1

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