c#从messagebox.show弹出窗口中选择文本

我一直在谷歌和stackoverflow搜索2小时。 必须有一些我只是俯瞰的东西。 有没有一种简单的方法可以在消息框中选择文本? 就在我现在调用MessageBox.Show()时,我无法复制显示的文本。 为什么不? 我如何设置文本可复制?

我的代码:

//catch all exceptions catch (Exception ex) { MessageBox.Show(ex.Message); //throw; } 

我希望能够选择出现的错误消息,以便用户将其发送给我,我可以解决他们的问题。 任何帮助是极大的赞赏。

编辑:不能使用crtl-c方法。 我的用户无法掌握这个概念。 需要用鼠标突出显示并右键单击以选择选项。 谢谢!

编辑:作为参考我最终做的是使用答案的混合。 我创建了一个带有单个按钮的弹出窗口,并在按钮操作后复制到剪贴板。 它不完美,但有正确的标签,它现在运作良好。 谢谢大家的建议!

 //catch all exceptions catch (Exception ex) { //MessageBox.Show(ex.Message); MessageBoxButtons buttons = MessageBoxButtons.OK; DialogResult result; // Displays the MessageBox. result = MessageBox.Show(ex.Message + "\n\nClick OK button to copy to clipboard", "Error", buttons); if (result == System.Windows.Forms.DialogResult.OK) { Clipboard.SetText(ex.Message); //throw; } } 

如果用户在MessageBox具有焦点时按下Ctrl-C ,则消息,MessageBox标题和MessageBoxButtons标签将复制到剪贴板。

编辑:您可以将消息输出到文本文件并让他们通过电子邮件发送给您? 为了简化操作,您可以将文件放在桌面上

我会在用户使用以下代码关闭MessageBox之后或之前将MessageBox的文本复制到剪贴板:

 var msg = "Hello world!"; MessageBox.Show(msg); Clipboard.SetText(msg); 

这应该很容易让用户理解。

在我曾经处理过的所有生产系统中,我们创建了一个自定义对话框,其中包含一个友好的用户消息,其中包含一个按钮,用于将错误消息,堆栈跟踪,屏幕截图和系统信息通过电子邮件发送到支持电子邮件。

据我所知,这已被问了很多时间,并且我找到了唯一的解决方案,如果您可以选择消息框,复制它(它将获得副本),然后您可以粘贴它,它将粘贴内容就像一个很好的格式……

从默认情况下,标准消息框无法选择文本..

从这篇文章 – 从MessageBox / Msgbox复制文本 …

您可以使用Ctrl-C从消息框中复制邮件。

从如何允许在MessageBox上复制邮件 ,您无法以编程方式访问默认Windows操作系统消息框中的文本。 你需要一个自定义控件。

MessageBox是一个窗口,有一个窗口,因此您可以使用windows api函数来查找它们。 看看这些import:

 [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); 

请注意,如果您为MessageBox提供标题,则可以使用FindWindow来查找它。 传递返回到FindWindowEx的句柄可以找到它的子窗口,GetWindowText可以让你读取该文本。 来源归因

但是,你不是已经有了消息的内容吗? 你有必要为了展示它,对吗?