Winforms 在表单应用程序中,是否有MsgBox的替代方案? 我喜欢MSGBOX停止所有进一步的处理直到它被点击,但是我不喜欢它在屏幕中间弹出那个小的MSGBOX。有没有一种方法可以像msgbox一样做一些事情,但要将它保留在我的表单上,它总是在视图中,这样我就可以继续并单击表单上的按钮,而不必将小msgbox窗口置于可能覆盖它的窗口之上

Winforms 在表单应用程序中,是否有MsgBox的替代方案? 我喜欢MSGBOX停止所有进一步的处理直到它被点击,但是我不喜欢它在屏幕中间弹出那个小的MSGBOX。有没有一种方法可以像msgbox一样做一些事情,但要将它保留在我的表单上,它总是在视图中,这样我就可以继续并单击表单上的按钮,而不必将小msgbox窗口置于可能覆盖它的窗口之上,winforms,visual-c++,replace,messagebox,Winforms,Visual C++,Replace,Messagebox,我使用msgbox通知我发生了某种情况,我手动修复了这种情况,完成后单击msgbox继续处理。如果表单上有这个按钮就好了。您的意思是表单应该用一条消息加上一个OK按钮来交换它的内容吗 这将类似于文本模式界面通常的工作方式 您可以通过添加一个禁用的面板或UserControl,在表单的最上面添加消息和按钮,并在希望提醒用户时启用它来实现此目的。但是,我对如何实现类似于MessageBox.Show和Dialog.Show的阻塞行为感到困惑。您的意思是表单应该用消息和OK按钮交换其内容吗 这将类似于

我使用msgbox通知我发生了某种情况,我手动修复了这种情况,完成后单击msgbox继续处理。如果表单上有这个按钮就好了。

您的意思是表单应该用一条消息加上一个OK按钮来交换它的内容吗

这将类似于文本模式界面通常的工作方式


您可以通过添加一个禁用的面板或UserControl,在表单的最上面添加消息和按钮,并在希望提醒用户时启用它来实现此目的。但是,我对如何实现类似于MessageBox.Show和Dialog.Show的阻塞行为感到困惑。

您的意思是表单应该用消息和OK按钮交换其内容吗

这将类似于文本模式界面通常的工作方式

您可以通过添加一个禁用的面板或UserControl,在表单的最上面添加消息和按钮,并在希望提醒用户时启用它来实现此目的。然而,我对如何实现类似于MessageBox.Show和Dialog.Show的阻塞行为感到困惑

如果有窗户遮住它,我就把它带到前面

这种情况不应该发生,但如果在程序中显示来自线程的消息框,则可能发生。该窗口将桌面作为父窗口,并且与用户界面中的窗口没有Z顺序关系。是的,可以很容易地消失在另一个应用程序的窗口后面,包括你自己的应用程序

Winforms中没有公开MessageBoxOptions选项MB_TOPMOST,它确保窗口位于最顶端。您可以这样使用它:

            MessageBox.Show("text", "caption", MessageBoxButtons.OK,
                MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
                (MessageBoxOptions)0x40000);    // use MB_TOPMOST
但到目前为止,最好的办法是在UI线程上显示消息框。使用Control.Invoke来执行此操作。这样,应用程序的其他窗口将被禁用,用户无法不注意到该框

还有一个问题,用户不会期望框出现,因为它是异步显示的。这意味着,当用户恰好按下回车键或空格键时,该框很容易被意外解除。或者点击了错误的位置。对此你无能为力

在你的主窗口中居中是技术上可行的,但是很难做到。检查

如果有窗户遮住它,我就把它带到前面

这种情况不应该发生,但如果在程序中显示来自线程的消息框,则可能发生。该窗口将桌面作为父窗口,并且与用户界面中的窗口没有Z顺序关系。是的,可以很容易地消失在另一个应用程序的窗口后面,包括你自己的应用程序

Winforms中没有公开MessageBoxOptions选项MB_TOPMOST,它确保窗口位于最顶端。您可以这样使用它:

            MessageBox.Show("text", "caption", MessageBoxButtons.OK,
                MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
                (MessageBoxOptions)0x40000);    // use MB_TOPMOST
但到目前为止,最好的办法是在UI线程上显示消息框。使用Control.Invoke来执行此操作。这样,应用程序的其他窗口将被禁用,用户无法不注意到该框

还有一个问题,用户不会期望框出现,因为它是异步显示的。这意味着,当用户恰好按下回车键或空格键时,该框很容易被意外解除。或者点击了错误的位置。对此你无能为力


在你的主窗口中居中是技术上可行的,但是很难做到。检查。

我真的不明白你在问什么。如果将表单设置为messagebox的所有者,它将显示在表单的顶部。没有理由把它藏在其他任何东西后面,否则你必须把它带到前面。我也不明白您是否希望在显示messagebox时与表单交互。当你说点击表单上的一个按钮时,你是什么意思?@Cody-我在你评论的第一部分编辑了一点问题!!我真的不明白你在问什么。如果将表单设置为messagebox的所有者,它将显示在表单的顶部。没有理由把它藏在其他任何东西后面,否则你必须把它带到前面。我也不明白您是否希望在显示messagebox时与表单交互。当你说点击表单上的一个按钮时,你是什么意思?@Cody-我在你评论的第一部分编辑了一点问题!!回答得好!我喜欢第一行答案!我会尝试接受你提到的内容并实施它,如果我遇到问题,我会告诉你
有问题吗!!回答得好!我喜欢第一行答案!我会尝试接受你提到的并实施它,如果我遇到任何问题,我会告诉你!!