2014-04-04 2 views
-1

메시지 상자가 포커스를 잃어 버린 경우에도 위에 머물러있는 기본 메시지 상자 (MessageBox.Show()) TopMost를 만드는 방법은 무엇입니까? 맞춤 설정을 만들고 싶지 않습니다. SetWindowHook 또는 비슷한 것을 사용하여 방법이 있습니까? 나는 이미 많은 연구를했지만 발견 한 모든 해결책이 효과가 없었습니다. 누군가 VB.net 또는 C#에서이 작업을 수행하는 방법을 알려 줄 수 있습니까?MessageBox Top 가장 사실

답변

1

가장 간단한 방법은 MessageBox 함수를 호출하고 MB_SYSTEMMODAL 플래그를 전달하는 것입니다.

+0

그게 전부입니다. 나는 이것을 지금 보게 될 것이다. : ^) – nexno

+0

상수 MB_TOPMOST가 있습니다 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx – prq

+0

@prq 나는' 일부 최신 Windows 버전에서는 MB_TOPMOST가 무시됩니다. 어쨌든'MB_SYSTEMMODAL'은 확실히 작동합니다. –

0

알겠습니다. 이것은 열려있는 모든 창 상단에 메시지 상자가 표시되며, Topmost 옵션이 있는지 여부와 상관없이 메시지 상자가 항상 앞에 표시됩니다.

Public Enum MessageBoxResult As UInteger 
     Ok = 1 
     Cancel 
     Abort 
     Retry 
     Ignore 
     Yes 
     No 
     Close 
     Help 
     TryAgain 
     ContinueOn 
     Timeout = 32000 
    End Enum 

    Public Enum MessageBoxOptions As UInteger 
     SystemModal = &H1000 
     NoFocus = &H8000 
     SetForeground = &H10000 
     Topmost = &H40000 
    End Enum 

    <DllImport("user32.dll", EntryPoint:="MessageBoxW", SetLastError:=True, Charset:=CharSet.Unicode)> _ 
    Public Shared Function MessageBox(hwnd As IntPtr, _ 
     <MarshalAs(UnmanagedType.LPTStr)> lpText As String, _ 
     <MarshalAs(UnmanagedType.LPTStr)> lpCaption As String, _ 
     <MarshalAs(UnmanagedType.U4)> uType As MessageBoxOptions) As <MarshalAs(UnmanagedType.U4)> MessageBoxResult 
    End Function 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     MessageBox(IntPtr.Zero, TextBox2.Text, TextBox1.Text, MessageBoxButtons.OK Or MessageBoxOptions.SystemModal + MessageBoxOptions.Topmost + MessageBoxOptions.SetForeground + MessageBoxIcon.Information) 
    End Sub 
End Class 
+0

이것이 바로 내가 말한 것입니까? 또한 맨 위의 다른 창을 자신의 위에 표시 할 수 없다고 확신하지 마십시오. –

+0

글쎄, 내 양식에서 버튼 클릭으로 messagebox를 열었습니다. 테스트를 위해 양식을 맨 위로 설정했습니다. 메시지 상자를 열면 최상위 양식 앞에 나타납니다. 폼을 다시 클릭하자마자 폼은 forground에 도착하고 msgbox는 백그라운드에서 시작됩니다. 그것의 실행에 관해서는 꼭대기에 있지는 않습니다. – nexno

+0

그 문제를 어떻게 해결할 수 있는지 알고 계신가요? :) – nexno