-1

有没有办法让默认的消息框(MessageBox.Show()) TopMost 为真,即使消息框失去焦点,它也会保持在顶部?我不想创建一个自定义的。有没有办法通过使用 SetWindowHook 或类似的东西来做到这一点?我已经研究了很多,但我发现的所有解决方案都不起作用。有人可以帮助我如何在 VB.net 或 C# 中执行此操作吗?

4

2 回答 2

1

最简单的方法是 p/invokeMessageBox函数并传递MB_SYSTEMMODAL标志。

于 2014-04-04T20:19:38.923 回答
0

我知道了。这将在所有打开的窗口顶部显示一个消息框,无论它们是否具有最顶层选项,消息框始终显示在前面。

    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
于 2014-04-04T21:08:36.470 回答