- - PR -
Debug実行とRelease版exeファイルからの実行で、画面最前面表示の動作が異なる
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-06-12 17:50
いつもお世話になっております。
現在開いているWindowsform1から別のWindowsform2を開き、Windowsform2が開いている間はWindowsform1はEnabled = False状態で後ろで待機させ、Windowsform2を閉じるとWindowsform1がEnabled = True状態に戻り画面上の最前面に表示されて選択状態になる、という動作を実現したいと考え以下のソースを書きました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim searchThread As System.Threading.Thread ' フォームを使用不可 Me.Enabled = False ' 別のexeを起動するスレッドを実行 searchThread = New System.Threading.Thread( _ New System.Threading.ThreadStart( _ AddressOf SearchThread_PriS)) searchThread.Start() ' スレッドが終了するまで待機 While (searchThread.IsAlive) Application.DoEvents() End While ' フォームを使用可能 Me.Enabled = True Me.Activate() Me.SetStyle(ControlStyles.Selectable, True) End Sub Private Sub SearchThread_PriS() Dim p As Process = New Process Try With p ' 別のexeを起動 .StartInfo.FileName = "Windowsform2.exe" .Start() ' プロセスが終了するまで待機 .WaitForExit() End With Catch ex As Exception ' エラーメッセージ MessageBox.Show("起動しっぱい") End Try End Sub こちらのソースで先に書きました実現したい動作をDebugVS.NETからのデバッグ実行からでは実現する事が出来たのですが、Release版でリビルドしたexeファイルから実行した途端にWindowsForm2を閉じた後のWindowsForm1の処理が「画面上の最前面に表示されず、選択状態にならなく」なってしまいました。 こちらの現象が発生する時は必ず別のウィンドゥが最前面に表示されて選択状態になっています。(例えばWinddowsForm1とInternetExplorerを開いた状態でWindowsForm2を開いて閉じると、InternetExplorerが最前面におり選択状態になっています) またこちらの現象は複数台のPCで現象を確認したところ、発生する事もあるし、しない事もあるなど、発生条件がはっきりせずに原因の究明と解決方法が分からずに困っております。 どなたか解決方法等ご存知でしたら教えて頂きたい思います。 [ メッセージ編集済み 編集者: 00_Number 編集日時 2004-06-12 17:50 ] |
|
投稿日時: 2004-06-16 16:29
確認したところ同じ状態になりました。
そこで、 Process process = new Process(); this.Enabled = false; process.StartInfo.FileName = "Form2.exe"; process.Start(); process.WaitForExit(); this.TopMost = true; this.Enabled = true; this.Activate(); this.TopMost = false; TopMostプロパティを一回trueすることで、回避できました。 C#ですいません。 VBにTopMostがある事を確認してないのですが。。。 |
|
投稿日時: 2004-06-21 18:57
hogehogeさん、ご解答ありがとうございます。
教えて頂いた方法を実は自分も試してみたのですが、どうにもうまくいきませんでした。 最終的にはWindowsform2が閉じる直前にAPI関数のSetForegroundWindowでWindowsform1を最前面に表示するという方法で解決しました。 |
1