消息框模态

时间:2012-11-07 20:48:40

标签: c# winforms messagebox

我一直在打开和关闭一段时间,但基本上我有一个我打电话来显示消息框的课程。

我正在尝试将我的消息框设置为模态,如果您将表单指定为模态,则可以轻松完成。

所以我的表单就像这样声明了

public partial class MainForm : Form

并且像这样实例化

var mainForm = new MainForm();

所以我有一个类,其中包含打开像这样的消息框的方法

MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
    MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));

这样可以正常工作,但活动表单仅在表单处于活动状态时有效.....

无论如何,有一个简单的方法吗?

4 个答案:

答案 0 :(得分:3)

我是一个C#新手,但不是已经模态的MessageBoxes吗?如果您正在创建自己的消息框,那么您不能只做messageboxform.ShowDialog();吗?

答案 1 :(得分:3)

这对我有用:

MessageBox.Show(Form.ActiveForm,"Finished processing", "Process finished", , MessageBoxButtons.OK, MessageBoxIcon.Information);

Form.ActiveForm会为您提供当前活动的表单,即使您从任何其他类提升MessageBox也是如此。

答案 2 :(得分:1)

如果你想要做的就是避免使用第一个参数,msdn有一些Winforms Messagebox的Show方法。

你可以尝试这个:

public static DialogResult Show(
    string text,
    string caption,
    MessageBoxButtons buttons,
    MessageBoxIcon icon,
    MessageBoxDefaultButton defaultButton
 )

所以对你:

MessageBox.Show(message, title, buttons, icon);

编辑: 我相信这应该是模态的(没有第一个参数),因为它是从主窗体中调用的。

答案 3 :(得分:1)

我的解决方案效果相当不错,但我不确定是否有更优雅的解决方案。

所以在MainForm.cs中我有

public static Form mainWindow { get; private set; }

然后在OnLoad方法

Focus();
BringToFront();
mainWindow = MainForm.ActiveForm;

然后在我的消息框方法中:

MainForm.mainWindow.Invoke(new MethodInvoker(delegate
{
    MainForm.mainWindow.BringToFront();
    MessageBox.Show(MainForm.mainWindow, message, title, MessageBoxButtons.OK, icon);
}));

我在这里遗漏了什么吗?有没有更好的替代mainWindow = MainForm.ActiveForm?