tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルスプラッシュスクリーンで最前面にならない
記事No10171
投稿日: 2010/06/30(Wed) 11:50
投稿者ひろこ
VB2005

スプラッシュスクリーンを使用するとメインフォームが最前面に表示されません。

エクスプローラーで出来上がったexeを起動するとエクスプローラーの後ろに
画面が表示されてしまいます。

下記の様にMe.Activateにしてもダメでした。
Me.BringToFront()でもダメでした。

Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    Me.Activate
End Sub

Private Sub Form1_Load( ByVal sender As System.Object,  ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Activate
End Sub

不思議なことに
VB2005の開発環境をを開いたままエクスプローラでダブルクリックでexeを起動すると
最前面に表示してうまくいくのですが
VB2005の開発環境を閉じてエクスプローラでダブルクリックでexeを起動すると
エクスプローラの後ろに表示されてしまいます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: スプラッシュスクリーンで最前面にならない
記事No10172
投稿日: 2010/06/30(Wed) 14:03
投稿者花ちゃん
Me.Activate = 最前面 ではありません。

最前面に表示したいなら、 Me.TopMost = True にして見ては。
http://www.hanatyan.sakura.ne.jp/dotnet/form01.htm#no7

[ツリー表示へ]
タイトルRe^2: スプラッシュスクリーンで最前面にならない
記事No10173
投稿日: 2010/07/01(Thu) 07:17
投稿者ひろこ
> Me.Activate = 最前面 ではありません。
>
> 最前面に表示したいなら、 Me.TopMost = True にして見ては。

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

TopMost=Trueにすると常に前に出てしまうため
Trueにして最前面にしたあとFalseにしてみました。

うまくはいったのですが、exeのタスクバーが数秒後Activeが外れて
白抜きになってしまいます。
エクスプローラーにActiveが移動してしまいます。
(エクスプローラーからexeをダブルクリックで起動しています)

下記の様にMe.focusをあててみたり、BringToFrontにしてみても
うまくいきませんでした。

Private Sub test_Activated(sender, e) Handles Me.Activated
    Me.TopMost = True
    Me.TopMost = False
    Me.Focus
    Me.BringToFront
End Sub

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

[ツリー表示へ]
タイトルRe^3: スプラッシュスクリーンで最前面にならない
記事No10174
投稿日: 2010/07/01(Thu) 22:25
投稿者YAS
ひろこさん,こんばんは。
下のようにして,Me.Activate2()としたらどうでしょう?

    <DllImport("user32.dll")> Public Shared Function AttachThreadInput(ByVal idAttach As Integer, ByVal idAttachTo As Integer, ByVal fAttach As Boolean) As Boolean
    End Function
    <DllImport("user32.dll")> Public Shared Function GetForegroundWindow() As IntPtr
    End Function
    <DllImport("user32.dll")> Public Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
    End Function

    Private Sub Activate2()
        Dim targetThreadProcessId As Integer = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero.ToInt32)
        Dim ThreadProcessId As Integer = GetWindowThreadProcessId(Me.Handle, 0&)
        AttachThreadInput(ThreadProcessId, targetThreadProcessId, True)
        Me.Activate()
        AttachThreadInput(ThreadProcessId, targetThreadProcessId, False)
    End Sub

[ツリー表示へ]
タイトルRe^4: スプラッシュスクリーンで最前面にならない
記事No10177
投稿日: 2010/07/02(Fri) 10:39
投稿者ひろこ
> 下のようにして,Me.Activate2()としたらどうでしょう?

YASさま

貼り付けしてやってみたらうまくいきました。
ありがとうございました。

内容は難しすぎで理解はできませんでした。
もう少し考えてみます。

本当助かりました。ありがとうございます。

[ツリー表示へ]