我一直在打开和关闭一段时间,但基本上我有一个我打电话来显示消息框的课程。
我正在尝试将我的消息框设置为模态,如果您将表单指定为模态,则可以轻松完成。
所以我的表单就像这样声明了
public partial class MainForm : Form
并且像这样实例化
var mainForm = new MainForm();
所以我有一个类,其中包含打开像这样的消息框的方法
MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));
这样可以正常工作,但活动表单仅在表单处于活动状态时有效.....
无论如何,有一个简单的方法吗?
答案 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?