System.Windows.Forms是否具有非静态消息框?
我想要以下可以使用的东西
var msg = new NonStaticMessageBox(); if(msg.Show("MyMessage", "MyCaption", MessageBoxButtons.OkCancel) == DialogResult.Ok) {....}
但是,特别是非静态的(我需要传递对它的引用)是否有人知道这种对象是否存在/在何处?
解决方案
.net框架中不存在此类对象。我们需要自己滚动。
看评论。封装是答案:)
为什么需要传递参考?我们可以只使用MessageBox.Show,仅此而已?如果我们真的需要它,可以制作自己的MessageBox类,例如:
public class MessageBox { private Form _messageForm = null; public void Show(string title,...) {...} }
或者,我们可以继承MessageBox类并实现自己的实例成员...但是,我认为这没有任何意义...
请记住,最终,S.W.F.MessageBox.Show()方法基本上都是围绕核心Win32 MessageBox()API调用的包装。 (通过Reflector运行mscorlib;我们将在名为ShowCore的私有方法中看到"真实"代码。)
(据我所知)在Win32中没有缓存被调用的MessageBox的措施,因此在.NET中没有办法。
我确实有一个自己定制的MessageBox类,尽管我不缓存它(在WinForms的使用场景中,同一个MB很少使用两次),但是提供了更详细的错误消息和信息-标头,描述,将消息复制到剪贴板的功能(通常是将未处理的异常通知用户的工具),然后是按钮。
你的旅费可能会改变。
我们可能想看看SQL Server附带的ExceptionMessageBox类。它在一个独立的程序集中,但是我不确定是否允许我们在没有SQL Server的情况下重新分发它,我们可能需要检查一下。
你说
"This is obviously a simplification of my problem."
但是,问题并不代表没有更多关于意图的信息,我们可以解决的问题。
假定可以通过调用ShowDialog并以返回DialogResult的形式来模态显示任何形式。我在这里没有看到问题。我们可以将任何我们喜欢的参数传递给它,根据需要定义内容,然后调用:
MyFactory.GetMyCustomDialogWithInterfacesOrSomesuch myDialog = new ... myDialog.ShowDialog() == DialogResult.Ok;
因为我们要处理的是表单而不是MessageBox,所以它不是静态的,所以这不是问题。