【问题标题】:Does System.Windows.Forms have a non-static messagebox?System.Windows.Forms 是否有非静态消息框?
【发布时间】:2008-09-24 18:43:13
【问题描述】:

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

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

但特别是非静态的(我需要传递对它的引用)有谁知道这样的对象是否/在哪里存在?

【问题讨论】:

  • 为什么需要这个?似乎您可以用 System.Windows.Forms.MessageBox 替换“msg”,并且传递参数而没有真正的收获。如果是这样,您可以抽象消息,并有一些转到框和一些其他地方,只需实现一个调用 MessageBox 的“其他地方”
  • 这显然是我的问题的简化。我最终会实现我自己的 itnerface,但现在想要一个快速而肮脏的原型

标签: .net winforms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看着cmets。封装就是你的答案:)

    【讨论】:

      【解决方案3】:

      为什么需要传递它的引用?你可以只使用 MessageBox.Show 就可以了?如果您真的需要它,您可以制作自己的 MessageBox 类,例如:

      public class MessageBox
      {
          private Form _messageForm = null;
      
          public void Show(string title,...) {...}
      }
      

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

          您可能想看看 SQL Server 附带的ExceptionMessageBox 类。它在一个独立的程序集中,但我不确定您是否可以在没有 SQL Server 的情况下重新分发它 - 您可能需要对此进行检查。

          【讨论】:

            【解决方案6】:

            你说

            "这显然是对 我的问题。”

            但是,如果没有更多有关意图的信息,您的问题并不能说明我们可以解决的问题。

            鉴于任何表单都可以通过调用 ShowDialog 并在返回 DialogResult 的表单中以模态方式显示。我在这里没有看到问题。你可以传入任何你喜欢的参数,定义你喜欢的内容,然后调用:

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

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

            【讨论】:

            • 这是很久以前的事了,解决方案确实是为表单创建我自己的消息框。让它成为一个实例而不是静态方法的一个原因是允许单元测试,尽管在我的例子中,我也希望能够轻松地切换实现。
            • 酷,没注意日期。
            猜你喜欢
            • 2014-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-26
            相关资源
            最近更新 更多