- - PR -
複数フォームの切り替えについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-09 21:56
こんにちは。
WindowsXP Professional SP2 VB.NET 2003 Framework 1.1でWindowsアプリを開発しています。 以下の動作について何故このように動作するのかご存知でしたら教えて下さい。 1.新規アプリケーションをForm1→Form2→Form3と起動するように作成します。 (1つ前のフォームのボタンクリックでそれぞれのフォームをShowするようにしています) 2.アプリケーションを実行し、Form1、Form2、Form3を起動します。 (このときそれぞれのフォームが重なるように表示させます) 3.すべて起動した状態でForm1、Form2、Form3をタスクバークリックで順番にアクティブ表示していきます。 4.Form3がアクティブ表示されると1つ前にアクティブだったForm2よりもForm1が前に表示される 現象が発生します。(発生しない場合もあり) →本来ならばForm1よりもForm2が前面であるべきでは??? ※尚、クラスライブラリから1度にForm1,2,3を起動表示しても同様の現象になります。 この現象に関して、Form2が前面になるよう制御することはできるのでしょうか? またこの動作が.NETの標準仕様である場合、発生する場合としない場合があること、 それぞれのオペレーションの違いがわからないことなどから顧客への説明が難しくて困っております。 ネット上でいろいろ探してみましたが同様の事例が見当たらず書き込みさせていただきました。 どなたかこの現象の理由をご存知でしたら教えていただけないでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2007-07-11 18:14
残念ですが、 同様の事例も知りませんし、 再現もしません。
是非調べてご報告ください。 | ||||||||
|
投稿日時: 2007-07-11 19:33
れいさん
お忙しいなか書き込みありがとうございます。
確かに再現する場合としない場合があり、その発生頻度はまちまちですが 何度も繰り返していると、この環境では起きると思います。 WindowsXP Professional SP2 VB.NET 2003 Framework 1.1 以外に他に環境の違いが起因するかもしれないので 他の端末でも調べてみることにします。 | ||||||||
|
投稿日時: 2007-07-11 23:46
まずは挙げられている現象が起きるミニマム コードを提示できるようにしてください。 いえ、提示どうこうよりそういった 「切り分け作業」 をしているかどうかが重要です。 新規プロジェクトから、あなたの仕様を満たす最低限のコードだけを書いた状態で再現が確認できなければ、どんな推測も意味をなしません。 もしまだそういった作業をされていないのであれば、環境を疑うのは早計というものです。 # フォーカス系のメッセージを捕まえたりすると、そういった現象が発生することがあります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-07-13 17:36
じゃんぬねっとさんご指摘ありがとうございます。
はい、もともと現象が発生したのはつくりが複雑なフォームだったため、 切り替え時に影響を与えるようなコーディングをしているのではないか と疑っていました。しかし、VB.NETで新規プロジェクトを作成しフォームをShowする だけで発生するのを確認したので、今回掲示板に書き込みさせてもらったのです。 したがって、ミニマムコードは本当に単純なもので、以下のようになります。 1.VS.NETで新規WindowsApplicationを作成します。 2.既にForm1は存在するため、Windowsフォームの追加メニューで Form2,Form3を追加します。 3.Form1にボタンコントロール"Button1"を貼り付け、 クリックイベントを以下のように実装します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myForm2 As New Form2 myForm2.Show() End Sub 4.3同様Form2にボタンコントロール"Button1"を貼り付け、 クリックイベントを以下のように実装します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myForm3 As New Form3 myForm3.Show() End Sub 5.ビルド後にできたexeファイルを実行し、Form1→Form2→Form3と表示した状態で タスクバークリックでそれぞれのフォームの切り替えを行います。 6.発生しない場合でも何度か切り替えを行っている内に、1つ前にアクティブだった フォームが2番目に表示されないといった現象が発生するかと思います。 ※この現象は2つのFormと1つのエクセルの組み合わせでも発生します。 ※関係あるかどうかわかりませんがリモートデスクトップを使用して 操作した場合は発生しませんでした。 |
1