1

我已经断断续续地工作了一段时间,但基本上我有一个我调用的类来显示消息框。

我试图让我的消息框成为模态的,如果您指定要模态的表单,这很容易完成。

所以我的表格是这样声明的

public partial class MainForm : Form

它是这样实例化的

var mainForm = new MainForm();

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

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

这很好用,但只有当表单处于活动状态时,活动表单才有效.....

无论如何,有没有简单的方法解决这个问题?

4

4 回答 4

4

这对我有用:

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

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

于 2014-02-12T12:28:04.603 回答
2

我是一个 C# 新手,但 MessageBoxes 不是已经模态了吗?如果您正在制作自己的消息框,您就不能这样做messageboxform.ShowDialog();吗?

于 2012-11-07T21:00:06.293 回答
1

如果您只想避免使用第一个参数,那么msdn有一些用于 Winforms 消息框的 Show 方法。

你可以试试这个:

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

所以对你来说:

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

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

于 2012-11-07T21:08:02.607 回答
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?

于 2012-11-09T14:16:28.083 回答