如何允许在消息框中复制消息

58

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

5个回答

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

6
WinForms不等同于WPF。不过,这确实是一个很棒的技巧。 - A.R.
A.R.:它仍然是.NET的一部分,在大多数情况下,您可以混合使用它们(而且这并不像在WPF中使用任何WinForms控件那样)。 - Joey
1
这可能是使用标准.NET“MessageBox”的最佳答案,但我认为理想的解决方案(也是可以*真正回答O.P.'s Q的)是一个消息框,类似于Visual Studio显示的那些,其中用户可以将其全部或部分文本标记为所有文本都在某个无边框只读的“TextBox”上与窗体具有相同背景颜色。我认为Microsoft为此开发了一些自定义“MessageBox”,它们没有与我们共享在.NET中。 - Tom

29
你可以在消息框处聚焦时使用Ctrl+C,但这样会获取到比错误信息更多的文本。
例如:
    MessageBox.Show("Message", "Message Title", MessageBoxButton.OK);

会将其复制并粘贴如下:

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

十年后依然惊叹不已。我怎么以前从来没有遇到过这个??? - undefined

14

我是这样做的:

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

它运行得相当不错。


1
如果针对 WPF 进行编程:if (msgtext, "bla bla bla. (OK to copy)", MessageBoxButton.OKCancel, MessageBoxImage.Information) == MessageBoxResult.OK) - CAD bloke
1
我稍微修改了这个建议,使用了是/否。var response = MessageBox.Show("...\r\n\r\n复制到剪贴板?", "", MessageBoxButton.YesNo); 然后 if (response == MessageBoxResult.Yes) { ClipBoard.SetText("..."); } - Adam Prescott

7

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

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

将该项复制到剪贴板。


12
抢占用户的剪贴板并非好事。 - Joey
3
可以将这个功能添加到按钮的点击事件中,这样只有在用户选择时才会复制。 - voidraen

2

最好的方法是使用一个可选文本控件的窗口,比如一个文本框。从我的经验来看,这是最简单的方式,实现起来不需要太多时间或代码更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接