使用c#将Messagebox.show()保存在其他应用程序之上

时间:2009-08-03 06:26:24

标签: c#

如何使用c#??

将Messagebox.show()保存在其他应用程序之上

5 个答案:

答案 0 :(得分:65)

我尝试了donutboy提供的解决方案,它似乎不接受0x40000(或40000)作为MessageBoxOptions Enum值的有效选项。

但是我发现使用MessageBoxOptions.DefaultDesktopOnly具有相同的效果,并将MessageBox保持在最顶层,直到用户确认。 即。

MessageBox.Show("Hello there", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

这可能是最简单的原生解决方案。

答案 1 :(得分:25)

有一个更好的解决方案,无需创建新表单。

MessageBox.Show("Message Text", "Header", MessageBoxButtons.OK, MessageBoxIcon.None, 
     MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000);  // MB_TOPMOST

0x40000是“MB_TOPMOST”-Flag。

答案 2 :(得分:10)

另一种处理此问题的简单方法:

MessageBox.Show(new Form { TopMost = true }, "This is TopMost", "TopMost", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

答案 3 :(得分:0)

使用“new Form { TopMost = true }”作为第一个参数的问题是它在完成后无法正确处理新表单。

花了很多功夫才找到这个问题(几个星期)。唯一的症状是该程序将在半小时后“无法响应”。完全锁定,必须使用附加的调试器或任务管理器将其杀死,没有可用的调试信息。

要解决这个问题,你需要这样的东西:

        using (Form form = new Form {TopMost = true})
        { 
            var retval = MessageBox.Show(form, text, caption, ok, error);
            form.Dispose();
            return retval;
        }
     

更好的是,编写您自己的“MyMessageBox”类,并使用它:

公共静态类 MyMessageBox {

    public static DialogResult Show(string text, string caption, MessageBoxButtons ok, MessageBoxIcon error)
    {
        using (Form form = new Form {TopMost = true})
        { 
            var retval = MessageBox.Show(form, text, caption, ok, error);
            form.Dispose();
            return retval;
        }
        // return UseForm ? MessageBox.Show(form, text, caption, ok, error) : MessageBox.Show(text, caption, ok, error);
    }
    public static DialogResult Show(string text, string caption, MessageBoxButtons ok)
    {
        using (Form form = new Form { TopMost = true })
        {
            var retval = MessageBox.Show(form, text, caption, ok);
            form.Dispose();
            return retval;
        }
    }
    public static DialogResult Show( string text, string caption)
    {
        using (Form form = new Form { TopMost = true })
        {
            var retval = MessageBox.Show(form, text, caption);
            form.Dispose();
            return retval;
        }
    }
    public static DialogResult Show(string text)
    {
        using (Form form = new Form { TopMost = true })
        {
            var retval = MessageBox.Show(form, text);
            form.Dispose();
            return retval;
        }

    }

}

答案 4 :(得分:0)

使用选项

<块引用>

MessageBoxOptions.DefaultDesktopOnly

相关问题