我想要一些我可以使用的内容如下
var msg = new NonStaticMessageBox();
if(msg.Show("MyMessage", "MyCaption", MessageBoxButtons.OkCancel) == DialogResult.Ok)
{....}
但特别是非静态的(我需要传递一个引用)有没有人知道这样的对象是否存在?
答案 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,所以它不是静态的,所以这不是问题。