none
スプラッシュスクリーンのZオーダについて RRS feed

  • 質問

  • VisualStudio2005 のVBでWindowsアプリケーションを作成しています。

     

    ロードに時間がかかるプログラムがあり、スプラッシュスクリーンを表示しています。

     

    やり方としては、プロジェクトのプロパティウィンドウで

    既存フォームをスプラッシュスクリーンとして指定する方法です。

     

    スプラッシュスクリーンはロードの開始から終了まで表示されますが

    ロードの処理の間に、ダイアログ画面をいくつか出さなければなりません。

    (ユーザにインタラクティブな操作を要求します)

     

    ダイアログはformを継承したごく基本的なものですが、

    (コントロールはラベルとボタンのみ)

    表示の際、スプラッシュスクリーンの背面に表示されるものと

    前面に表示されるものがあり、その違いが分からず困っています。

     

    いろいろと試した結果、次の事がわかりました。

    前面に出る画面をA、背面に出る画面をBとすると、

    ・Aは必ず前面、Bも必ず背面に出る(再現性が100%)

    ・AとBではプロパティ、及び、呼出し方法に違いがない。

     ※呼出しメソッドはform.showDialog(me)としています。

    ・AとBの呼出し箇所を試しに逆にしてもAは前面、Bは背面に出る。(前後の処理に無関係)

    AとBのZオーダは、それぞれの個体に依存しているように見えます。

     

    ただし、作成したアプリをXPとVistaで動かすと、XPでは前面、Vistaでは背面に出る

    といったダイアログもありました。

     

    TopMostプロパティやFocusメソッドを使用してみましたが変わりません。

    どのダイアログもスプラッシュスクリーンより前に表示したいのですが

    前面と背面に出るフォームの条件に違いはなんなのでしょうか。

     

    ご存じの方がいらっしゃればご教示ください。

    よろしくお願いします。

     

     

     

    2008年7月17日 5:12

回答

  • Load時に別のFormを呼び出したりした場合の振る舞いに関しては

    定義がされていないため、安定した稼動は保障されないと

    理解した方が良いのでしょうか。

     

    そうなると、解析そのものが無駄のようなので、

    ワークアラウンドを検討したいと思います。

     

    根本的には設計の問題なのだと思いますが、

    現状ではLoadイベントの内容を大きく変更するにはリスクが高すぎるので

    次回からの反省材料にしたいと思います。

     

    回答ありがとうございました。

    2008年7月23日 5:36

すべての返信

  • これだけじゃ特定できないと思います。

    初手として、AとBの中身の違いを探してみて下さい。

    (例えば、Loadイベントであるとか)

     

     

    念のため書いておきます。

    Loadイベントでフォームを閉じるとかいうことは辞めた方が良いです。

    2008年7月17日 14:09
    モデレータ
  • Load時に別のFormを呼び出したりした場合の振る舞いに関しては

    定義がされていないため、安定した稼動は保障されないと

    理解した方が良いのでしょうか。

     

    そうなると、解析そのものが無駄のようなので、

    ワークアラウンドを検討したいと思います。

     

    根本的には設計の問題なのだと思いますが、

    現状ではLoadイベントの内容を大きく変更するにはリスクが高すぎるので

    次回からの反省材料にしたいと思います。

     

    回答ありがとうございました。

    2008年7月23日 5:36