【问题标题】:How to allow copying message on MessageBox如何允许在 MessageBox 上复制消息
【发布时间】:2011-01-26 20:13:12
【问题描述】:

如何在 WPF 中允许从 MessageBox 中选择和复制文本?

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    如果您不需要选择文本作为要求,只需使用 System.Windows.Forms.MessageBox。它映射到已经允许使用 Ctrl+C 复制其内容的系统默认值。

    【讨论】:

    • --> Total Nitpick
    • A.R.:它仍然是 .NET 的一部分,并且在大多数情况下,您可以将它们混合使用(这并不像使用 WPF 或类似中的任何 WinForms 控件)。
    • 这可能是使用标准 .NET“MessageBox”的最佳答案,但我认为理想的解决方案(以及字面意思的解决方案回答 OP 的 Q) 将是一个消息框,其工作方式类似于 Visual Studio 显示的消息框,用户可以在其中标记其中的任何部分或全部文本,就好像所有文本都在某个无边界只读“文本框”中一样与窗体具有相同背景颜色的窗体。我认为微软为此开发了一些自定义的“消息框”,他们没有在 .NET 中与我们共享。
    【解决方案2】:

    您可以在消息框获得焦点时使用 Ctrl+C,但它会为您提供比错误消息更多的文本。

    例如

        MessageBox.Show("Message", "Message Title", MessageBoxButton.OK);
    

    复制粘贴为:

        ---------------------------
        Message Title 
        ---------------------------
        Message
        ---------------------------
        OK   
        ---------------------------
    

    【讨论】:

      【解决方案3】:

      我是这样做的:

      string msgtext = "message text";
      if (MessageBox.Show(msgtext, "bla bla bla. (OK to copy)", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
        { Clipboard.SetText(msgtext); }
      

      效果很好。

      【讨论】:

      • 对于 WPF:if (msgtext, "bla bla bla. (OK to copy)", MessageBoxButton.OKCancel, MessageBoxImage.Information) == MessageBoxResult.OK)
      • 我稍微调整了这个建议以使用是/否。 var response = MessageBox.Show("...\r\n\r\nCopy to clipboard?", "", MessageBoxButton.YesNo); 然后if (response == MessageBoxResult.Yes) { ClipBoard.SetText("..."); }
      【解决方案4】:

      如果您正在显示消息框...

      System.Windows.Forms.Clipboard.SetDataObject(messageToShowInMsgBoxString, true);
      

      将项目复制到剪贴板。

      【讨论】:

      • 不过,破坏用户的剪贴板并不是很好。
      • 是的,但是您可以将其添加到按钮单击事件中,以便仅在他们选择时复制。
      【解决方案5】:

      最好的方法是使用带有可选文本控件的窗口,例如文本框。我可以根据经验说这是最简单的方法,并且不会花费太多时间或代码更改来实现。

      【讨论】:

        猜你喜欢
        • 2014-01-09
        • 2017-05-13
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2011-02-16
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多