- - PR -
スプラッシュウィンドウ表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-06 05:54
いつも勉強させていただいております。
WindowsFormの画面を表示する前にスプラッシュウィンドウを表示させたいのですが、 スプラッシュウィンドウが閉じられた後、肝心の画面が最前面に表示されません。 画面A (別プロセスの画面。画面B、Cの含まれるexeをキックして起動する。) 画面B (メインの画面) 画面C (スプラッシュウィンドウ) 1.画面Aから画面B、C側のexeを起動 2.スプラッシュウィンドウを表示 private formSp as SplashForm '画面C。スプラッシュ画面 Sub Main() 'スプラッシュウィンドウ表示 dispSplush() 'メインの画面を生成 createMain() End Sub private Sub dispSplush() 'スレッドの作成 thread1 = New System.Threading.Thread( _ New System.Threading.ThreadStart(AddressOf splushStart)) 'スレッドの開始 thread1.Start() End Sub 'スプラッシュ画面表示 Private Sub splushStart() 'スプラッシュの画面を作成 formSp = New SplashForm 'スプラッシュの画面をを表示する Application.Run(formSp) End Sub Private Sub createMain() 'メインの画面の作成 dim formMain as MainForm = New MainForm 'スプラッシュウィンドウを閉じる formSp.Close() formSp.Dispose() 'スプラッシュの画面をを表示する Application.Run(formMain) End Sub 3.スプラッシュウィンドウがCloseされ、メイン画面(画面B)が表示されるが 起動元の画面(画面A)の背後にある。最前面ではない。 スプラッシュウィンドウのクローズするタイミングがおかしいのかと思い、 メイン画面(画面B)のActivatedイベントに記述してみたのですが、それでも 最前面とはなりませんでした。 どなたか原因がお分かりの方がいらっしゃいましたらご教授宜しくお願いいたします。 | ||||
|
投稿日時: 2006-04-06 06:34
Application.Run がどのようなメソッドか、それを調べるのが先だと思う。
〆 written by Jitta@わんくま同盟 on 2006/04/06 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||
|
投稿日時: 2006-04-06 09:04
http://dobon.net/vb/dotnet/form/splashwindow.html
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-06 09:18
スレッドを分けないで、単純に、スプラッシュウィンドウを消したら、メインウィ
ンドウを手前に持ってくるようにすれば良いと思うのですが。 | ||||
|
投稿日時: 2006-04-06 11:20
みなさま、ご返信ありがとうございました。
じゃんぬねっと様に質問があります。 リンクしていただいた先のコードを再現してみましたが、やはりメイン画面が後ろに隠れてしまいました。 Application.Runが2回発行されていますが、Threadが別ならば大丈夫なのでしょうか? スプラッシュウィンドウのThreadが終わったときに、画面のフォーカスは表示したいメイン画面ではなく、外れて呼び出し元に戻ってしまうような印象を受けました。 ご指摘いただいた箇所を調べてみましたが、そのあたりがまだ理解できていません。 知識不足なので、質問自体はずしていたら申し訳ありません。 | ||||
|
投稿日時: 2006-04-06 11:30
すみません、やっぱり外してました。
Threadが別ならばそれぞれにApplication.Runが発行されるのは大丈夫なのですね。 そこで問題なのですが、メイン画面がスプラッシュウインドウのThreadが終了させたあと メイン画面がアクティブになっていないのです。 意識的に変えることはできるのでしょうか? ※Activateイベントは動いています。 | ||||
|
投稿日時: 2006-04-06 11:34
アクティブにはなっているけど、前面に出ていないということではないでしょうか? BringToFront メソッドを実行してもダメだったでしょうか? タイミングによってはこのあたりはうまく動かないことがあります。 Application.DoEvents メソッドなども呼び出す必要があるかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-06 12:14
じゃんぬねっと様、ありがとうございました。
BringToFrontメソッドを使用してみましたが…ダメでした。 (ヘルプより) 「コントロールをトップレベル コントロールにするわけではありません。」とあるので、プロセスが違う起動元画面は対象外なのかもしれません。 SetForeGroundWindowなどのAPIを使用しないといけないのかなと思いました。 |