How to keep a Messagebox.show() on top of other application using c# ??
How to keep a Messagebox.show() on top of other application using c# ??
The problem with using "new Form { TopMost = true }" as the first argument is that it fails to properly dispose of the new form when it is done.
It took a lot of work to find this problem (several weeks). The only symptom was that the program would "Fail to Respond" a half hour later. Totally locked up, had to kill it with an attached debugger or the task manager, no debug info available.
To solve this, you need something like this:
using (Form form = new Form {TopMost = true})
{
var retval = MessageBox.Show(form, text, caption, ok, error);
form.Dispose();
return retval;
}
Even better, write your own "MyMessageBox" class, and use that:
public static class 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;
}
}
}
Based on Dave's answer:
WPF:
MessageBox.Show(new Window { Topmost = true }, "Message", "Title");
Windows Form:
MessageBox.Show(new Form { TopMost = true }, "Message", "Title");