.net System.Windows.Forms是否具有非静态messagebox?

.net System.Windows.Forms是否具有非静态messagebox?,.net,winforms,.net,Winforms,我想要的东西,我可以使用如下 var msg = new NonStaticMessageBox(); if(msg.Show("MyMessage", "MyCaption", MessageBoxButtons.OkCancel) == DialogResult.Ok) {....} 但特别是非静态的,我需要传递一个对它的引用。有人知道这样的对象是否存在/在哪里吗?这样的对象在.net framework中不存在。您需要自己滚动。这样的对象在.net framework中不存在。您需要自

我想要的东西,我可以使用如下

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

但特别是非静态的,我需要传递一个对它的引用。有人知道这样的对象是否存在/在哪里吗?

这样的对象在.net framework中不存在。您需要自己滚动。

这样的对象在.net framework中不存在。您需要自己动手。

查看评论。封装是您的答案:

查看评论。封装是您的答案:

为什么需要传递它的引用?你可以只使用MessageBox.Show,就这样?如果您确实需要它,您可以创建自己的MessageBox类,例如:

public class MessageBox
{
    private Form _messageForm = null;

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

或者您可以继承MessageBox类并实现自己的实例成员。。。但是我看不出这有什么意义…

为什么需要传递它的引用?你可以只使用MessageBox.Show,就这样?如果您确实需要它,您可以创建自己的MessageBox类,例如:

public class MessageBox
{
    private Form _messageForm = null;

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

或者您可以继承MessageBox类并实现自己的实例成员。。。但是我看不出这有什么意义…

请记住,归根结底,S.W.F.MessageBox.Show方法基本上都是围绕核心Win32 MessageBox API调用的包装。将mscorlib穿过反射器;您将在名为ShowCore的私有方法中看到真正的代码

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

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


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

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

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

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


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

您可能需要查看SQL Server附带的类。它位于一个自包含的程序集中,但我不确定是否允许您在没有SQL Server的情况下重新分发它-您可能需要对此进行检查。

您可能需要查看SQL Server附带的类。它位于一个自包含的程序集中,但我不确定是否允许您在没有SQL Server的情况下重新分发它-您可能需要检查一下这一点。

您是说


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

然而,你的问题并没有揭示一个问题,如果没有更多关于意图的信息,我们可以解决这个问题

假设任何表单都可以通过调用ShowDialog和返回DialogResult的表单以模式显示。我看不出有什么问题。您可以将您喜欢的任何参数传递给它,定义您喜欢的内容,然后调用:

MyFactory.GetMyCustomDialogWithInterfacesOrSomesuch myDialog = new ...
myDialog.ShowDialog() == DialogResult.Ok;
因为您处理的是表单而不是MessageBox,所以它不是静态的,所以不是问题。

您说


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

然而,你的问题并没有揭示一个问题,如果没有更多关于意图的信息,我们可以解决这个问题

假设任何表单都可以通过调用ShowDialog和返回DialogResult的表单以模式显示。我看不出有什么问题。您可以将您喜欢的任何参数传递给它,定义您喜欢的内容,然后调用:

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

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

为什么需要它?似乎您可以将msg替换为System.Windows.Forms.MessageBox,并将参数传递给其他人,而不会获得任何实际收益。如果是这样,您可以抽象消息,并有一些转到框和其他地方,只需实现调用MessageBox的其他地方。这显然是对我的问题的简化。我最终会实现我自己的itnerface,但现在我想要一个快速而肮脏的原型为什么你需要这个?似乎您可以将msg替换为System.Windows.Forms.MessageBox,并将参数传递给其他人,而不会获得任何实际收益。如果是这样的话,您可以抽象消息,并有一些转到框和其他地方,只需实现一个elsew
在这里调用MessageBox这显然是对我的问题的简化。我最终将实现我自己的itnerface,但现在我想要一个快速而肮脏的原型。这是很久以前的事了,解决方案确实是为表单创建我自己的messagebox。将其作为实例而不是静态方法的一个原因是允许进行单元测试,尽管在我的例子中,我也希望能够轻松地切换实现。很酷,我没有注意到日期。这是很久以前的事了,解决方案确实是为表单创建我自己的messagebox。将其作为实例而不是静态方法的一个原因是允许进行单元测试,尽管在我的例子中,我也希望能够轻松地切换实现。很酷,我没有注意到日期。