C# MessageBox顶部最真实

C# MessageBox顶部最真实,c#,vb.net,messagebox,msgbox,topmost,C#,Vb.net,Messagebox,Msgbox,Topmost,有没有办法使默认messagebox(messagebox.Show())成为最上面的真值,即使messagebox失去焦点,它也会保持在最上面? 我不想创建一个自定义的。 有没有办法使用SetWindowHook或类似的工具? 我已经做了很多研究,但我找到的所有解决方案都不起作用。 有人能帮我在VB.net或C#中做这件事吗?最简单的方法是p/调用函数并传递MB\u SYSTEMMODAL标志。我知道了。 这将在所有打开的窗口顶部显示一个messagebox,不管它们是否有最上面的选项,mes

有没有办法使默认messagebox(
messagebox.Show()
)成为最上面的真值,即使messagebox失去焦点,它也会保持在最上面? 我不想创建一个自定义的。 有没有办法使用SetWindowHook或类似的工具? 我已经做了很多研究,但我找到的所有解决方案都不起作用。
有人能帮我在VB.net或C#中做这件事吗?

最简单的方法是p/调用函数并传递
MB\u SYSTEMMODAL
标志。

我知道了。 这将在所有打开的窗口顶部显示一个messagebox,不管它们是否有最上面的选项,messagebox始终显示在前面

    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
Public Enum MessageBoxResult作为UInteger
Ok=1
取消
中止
重试
忽略
对
不
接近
帮助
特里亚根
继续
超时=32000
结束枚举
作为UInteger的公共枚举MessageBoxOptions
SystemModal=&H1000
NoFocus=&H8000
设置前景=&H10000
顶部=&H40000
结束枚举
_
公共共享功能消息框(hwnd作为IntPtr_
将文本作为字符串_
lpCaption作为字符串_
u键入作为MessageBoxOptions)作为MessageBoxResult
端函数
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
MessageBox(IntPtr.Zero、TextBox2.Text、TextBox1.Text、MessageBoxButtons.OK或MessageBoxOptions.SystemModal+MessageBoxOptions.top+MessageBoxOptions.setfront+MessageBoxIcon.Information)
端接头
末级

听起来很有趣。我现在来看看这个。:^)有一个MB_TOPMOST常量:@prq我听说在一些现代Windows版本中,
MB_TOPMOST
被忽略了。无论如何
MB_SYSTEMMODAL
肯定有效。这就是我告诉你的,对吗?另外,不要太确定另一个最上面的窗口不能出现在您的窗口的顶部。好吧,我从表单中单击按钮打开了messagebox。为了进行测试,我还将表单设置为最顶层。当我打开messagebox时,它出现在最上面的表单前面。只要我再次点击表单,表单就会进入forground,msgbox就会进入后台。它并不总是在上面,只是在它执行的时候。你知道我怎么能解决它吗?:)是的,我知道为什么会发生这种情况。然而,你似乎想自己回答这个问题。在这种情况下,我并没有被鼓励做更多的事情。我希望我们在继续这个新问题之前先处理一下原来的问题。我认为没有必要为此创建一个新问题,所以我修改了它;)我真的很感兴趣为什么会这样。你介意告诉我吗?:)