在表单应用程序中,是不是有任何替代 MsgBox 的方法?

Posted

技术标签:

【中文标题】在表单应用程序中,是不是有任何替代 MsgBox 的方法?【英文标题】:In forms application, is there any Alternative to MsgBox?在表单应用程序中,是否有任何替代 MsgBox 的方法? 【发布时间】:2011-01-08 06:29:36 【问题描述】:

我喜欢 MsgBox 如何停止所有进一步的处理,直到它被点击,但我不喜欢它如何在屏幕中间弹出那个小 msgbox。 有没有办法做类似 msgbox 的操作,但将其保留在我的表单上(始终可见),这样我就可以继续并单击表单上的按钮,而不必打开小 msgbox 窗口在可能覆盖它的窗户上。

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

【问题讨论】:

我不太明白你在问什么。如果您将表单设置为消息框的所有者,它将显示在您的表单顶部。没有理由将它隐藏在其他任何东西后面,否则你必须把它带到前面。我也不明白您是否希望能够在显示消息框时与表单进行交互。当您说“单击表单上的按钮”时,您是什么意思? @Cody - 我为您评论的第一部分稍微编辑了问题! 【参考方案1】:

如果有窗户,我会把它带到前面

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

有一个 MessageBoxOptions 选项未在 Winforms 中公开,MB_TOPMOST 可确保窗口位于最顶层。你可以这样使用它:

            MessageBox.Show("text", "caption", MessageBoxButtons.OK,
                MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
                (MessageBoxOptions)0x40000);    // use MB_TOPMOST

但到目前为止,最好的办法是在您的 UI 线程上显示消息框。使用 Control.Invoke() 这样做。这样您应用的其他窗口就会被禁用,用户不会注意到该框。

还有一个问题,用户不会期望该框出现,因为它与她所做的任何事情都是异步显示的。这意味着当用户碰巧按下 Enter 或 Space 键时,该框很容易被意外关闭。或者点击了错误的位置。对此你无能为力。

在您的主窗口中将框居中在技术上是可行的,但很难做到。检查this answer。

【讨论】:

很好的答案!我喜欢第一行的答案!我会尽量采纳你提到的并实施它,如果我遇到任何问题,我会告诉你!!【参考方案2】:

你的意思是表单应该用一条消息和一个确定按钮来交换它的内容吗?

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

您可以通过在表单顶部添加一个禁用的面板或带有消息和按钮的用户控件来实现它,并在您希望提醒用户时启用它。但是,我很困惑如何实现类似于 MessageBox.Show() 和 Dialog.Show() 的阻塞行为。

【讨论】:

以上是关于在表单应用程序中,是不是有任何替代 MsgBox 的方法?的主要内容,如果未能解决你的问题,请参考以下文章

recaptcha.net 是不是有任何替代品来阻止垃圾邮件? [关闭]

如何使用表单根据 msgbox 上输入的内容导航到特定查询?

在表单面板的中心显示 msgbox

Android 聊天是不是有任何 Openfire smack 替代方案?

在 PrepareStatement 中设置参数是不是有任何基于通用的替代方法

GOF 单例模式是不是有任何可行的替代方案?