System.Windows.Forms是否具有非静态消息框?

时间:2008-09-24 18:43:14

标签: .net winforms

我想要一些我可以使用的内容如下

var msg = new NonStaticMessageBox();
if(msg.Show("MyMessage", "MyCaption", MessageBoxButtons.OkCancel) == DialogResult.Ok)
 {....}

但特别是非静态的(我需要传递一个引用)有没有人知道这样的对象是否存在?

6 个答案:

答案 0 :(得分:2)

.net框架中不存在这样的对象。你需要自己动手。

答案 1 :(得分:2)

看评论。封装是你的答案:)

答案 2 :(得分:0)

为什么你需要传递它的参考?你可以使用MessageBox.Show,这就是全部?如果你真的需要它,你可以创建自己的MessageBox类,如:

public class MessageBox
{
    private Form _messageForm = null;

    public void Show(string title,...) {...}
}

或者你可以继承MessageBox类并实现你自己的实例成员......但是我觉得这没有任何意义......

答案 3 :(得分:0)

请记住,在一天结束时,S.W.F.MessageBox.Show()方法基本上都是围绕核心Win32 MessageBox()API调用的包装器。 (通过Reflector运行mscorlib;您将在名为ShowCore的私有方法中看到“真实”代码。)

没有规定(据我所知)在Win32中缓存被调用的MessageBox,因此在.NET中无法这样做。

我确实拥有自己定制的MessageBox类 - 虽然我这样做不是为了缓存它(在WinForms的使用场景中,同样的MB很少使用两次),而是提供更详细的错误消息和信息 - 标题,描述,将消息复制到剪贴板的能力(它通常是通知用户未处理的异常的工具)然后是按钮。

您的里程可能会有所不同。

答案 4 :(得分:0)

您可能希望查看SQL Server附带的ExceptionMessageBox类。它是一个独立的程序集,但我不确定你是否可以在没有SQL Server的情况下重新发布它 - 你可能需要检查它。

答案 5 :(得分:0)

你说

  

“这显然是一种简化   我的问题。“

但是,如果没有关于意图的更多信息,我们可以解决问题。

鉴于任何表单都可以通过调用ShowDialog以及返回DialogResult的形式以模态方式显示。我在这里没有看到问题。您可以将喜欢的任何参数传递到其中,根据需要定义内容,然后调用:

MyFactory.GetMyCustomDialogWithInterfacesOrSomesuch myDialog = new ...
myDialog.ShowDialog() == DialogResult.Ok;

因为你正在处理表单而不是MessageBox,所以它不是静态的,所以这不是问题。