C# 消息框模式
我已经断断续续地工作了一段时间,但本质上我有一个类,我调用它来显示消息框 我试图让我的消息框是模态的,如果您指定要使用模态的表单,这很容易做到 所以我的表单是这样声明的C# 消息框模式,c#,winforms,messagebox,C#,Winforms,Messagebox,我已经断断续续地工作了一段时间,但本质上我有一个类,我调用它来显示消息框 我试图让我的消息框是模态的,如果您指定要使用模态的表单,这很容易做到 所以我的表单是这样声明的 public partial class MainForm : Form var mainForm = new MainForm(); MainForm.ActiveForm.Invoke(new MethodInvoker(delegate { MessageBox.Show(MainForm.ActiveForm
public partial class MainForm : Form
var mainForm = new MainForm();
MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));
它是这样实例化的
public partial class MainForm : Form
var mainForm = new MainForm();
MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));
因此,我有一个类,其中包含打开消息框的方法,如下所示
public partial class MainForm : Form
var mainForm = new MainForm();
MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));
这可以正常工作,但活动窗体仅在窗体处于活动状态时工作
无论如何,有没有一个简单的方法来解决这个问题呢?我是个新手,但是MessageBox不是已经是模态了吗?如果你在制作自己的messagebox,你就不能只做
messageboxform.ShowDialog()代码>?我是个C#新手,但MessageBox不是已经有模式了吗?如果你在制作自己的messagebox,你就不能只做messageboxform.ShowDialog()代码>?如果您只想避免使用第一个参数,则有几个用于Winforms Messagebox的显示方法
你可以试试这个:
public static DialogResult Show(
string text,
string caption,
MessageBoxButtons buttons,
MessageBoxIcon icon,
MessageBoxDefaultButton defaultButton
)
所以对你来说:
MessageBox.Show(message, title, buttons, icon);
编辑:
我认为这应该是模态的(没有第一个参数),因为它是从主窗体调用的。如果您只想避免使用第一个参数,则有一些Winforms Messagebox的显示方法
你可以试试这个:
public static DialogResult Show(
string text,
string caption,
MessageBoxButtons buttons,
MessageBoxIcon icon,
MessageBoxDefaultButton defaultButton
)
所以对你来说:
MessageBox.Show(message, title, buttons, icon);
编辑:
我相信这应该是模态的(没有第一个参数),因为它是从主窗体调用的。我有一个相当好的解决方案,但我不确定是否有更优雅的解决方案
所以在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更好的替代方案?我有一个效果相当好的解决方案,但我不确定是否有更优雅的解决方案
所以在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的方法?这对我很有用:
MessageBox.Show(Form.ActiveForm,"Finished processing", "Process finished", , MessageBoxButtons.OK, MessageBoxIcon.Information);
Form.ActiveForm将为您提供当前活动的表单,即使您正在从任何其他类提升MessageBox。这对我很有用:
MessageBox.Show(Form.ActiveForm,"Finished processing", "Process finished", , MessageBoxButtons.OK, MessageBoxIcon.Information);
Form.ActiveForm将为您提供当前活动的表单,即使您是从任何其他类提升MessageBox。遗憾的是,ShowDialog是WPF windows而不是WinForms的方法。您可以在windows中使用Form.ShowDialog,但不能使用MessageBoxforms@funseiki不,我很确定您可以使用.ShowDialog()在windows窗体中。@MicahArmantrout他可以制作自己的窗体,就像MessageBox一样,然后使用.ShowDialog()。@MicahArmantrout和Jutanium你是对的,这两种方法都适用,我的错误。遗憾的是,ShowDialog是WPF windows而不是WinForms的一种方法。在windows中可以有form.ShowDialog,但不能有MessageBoxforms@funseiki不我很确定你可以在windows窗体中使用.ShowDialog()。@MicahArmantrout他可以制作自己的窗体,就像MessageBox一样,然后使用.ShowDialog()。@MicahArmantrout和Jutanium你是对的,这两个都适用,我错了。“MessageBox是模态的”这些消息框是从Windows.System.forms.form继承的,还是您在谈论messagebox.show?“消息框是模态的”这些消息框是从Windows.System.forms.form继承的,还是您在谈论messagebox.show?如果不指定第一个参数,消息框是桌面的模态。如果未指定第一个参数,则消息框是桌面的模态。另一个选项是设置mainWindow=FindForm();另一个选项是设置mainWindow=FindForm();在有载方法中。