【问题标题】:How do I copy text to the clipboard with partial italics?如何使用部分斜体将文本复制到剪贴板?
【发布时间】:2017-02-02 23:51:16
【问题描述】:

如何使 txtTitleofWebpage.Text 在复制到剪贴板时显示为斜体,以便用户可以将引用复制到 Microsoft Word 文档中?我正在尝试使用 C# 制作一个 Windows 表单应用程序,以根据用户输入表单的信息生成哈佛参考。

代码如下:

Clipboard.SetText(wholeName + ", (" + yOPDate + ") " + txtTitleofWebpage.Text + 
                  " [online]. Available from: " + txtURLWeb.Text + " [Accessed: " + 
                  accessDateWeb.Value.ToShortDateString() + "].", TextDataFormat.Rtf);

【问题讨论】:

  • 好吧,不是那样的。您需要使用一种可以指定印刷样式并与您要粘贴到的任何应用程序兼容的格式。 HTML 和富文本 (RTF) 是常见的选择。谷歌“c#copy html to clipboard”,点击率最高的都是现有的SO问题。
  • @HansPassant - 所以,我可以将 TextDataFormat 设置为 HTML。不过,我发现如果我在 txtTitleofWebpages.Text 周围添加斜体开始和结束标记,我会收到错误。
  • 在开始和结束标签前添加@,这将忽略它们可能被视为的转义字符。喜欢:@"This \n will not make a newline"
  • @EpicKip 所以,像这样......? Clipboard.SetText(@<body> wholeName + ", (" + yOPDate + ") " + @<i> txtTitleofWebpage.Text @</i> + " [online]. Available from: " + txtURLWeb.Text + " [Accessed: " + accessDateWeb.Value.ToShortDateString() + "]." @</body>, TextDataFormat.Html);
  • @HansPassant - 文本将被粘贴到 Word 文档中。

标签: c# winforms clipboard copy-paste clipboarddata


【解决方案1】:

看来您必须在 html 字符串中插入一个“标题”,我为此找到了 2 个示例:

这适用于 Word:
示例代码:

    Clipboard.SetText(@"Version:1.0
                        StartHTML:000125
                        EndHTML:000260
                        StartFragment:000209
                        EndFragment:000222
                        <HTML>
                        <head>
                        <title>HTML clipboard</title>
                        </head>
                        <body>
                        <!–StartFragment–><b>Hello!</b><!–EndFragment–>
                        </body>
                        </html>", 
                        TextDataFormat.Html);

这会将 Hello! 复制到您的剪贴板,您必须根据我认为的大小更改片段,所以我不知道这将如何与动态字符串一起使用,但我希望这样会让你开始。 666

如果你也可以使用 RTF

Clipboard.SetText(@"{\rtf1\ansi This is in \i\f0\fs17 italic\i0.}",
                    TextDataFormat.Rtf);

字符串示例

var q = "test123";
Clipboard.SetText(@"{\rtf1\ansi This is in \i\f0\fs17 " + q + @"\i0.}",
                    TextDataFormat.Rtf);

or

var q = "test123";
Clipboard.SetText( $@"{\rtf1\ansi This is in \i\f0\fs17 {q}\i0.}",
                    TextDataFormat.Rtf);

注意字符串第二部分之前的@,如果您需要转义某些字符(您需要使用RTF),请在每个开头添加@ ".

这似乎要容易得多,因为您不必插入标题,但格式本身更复杂 imo。

【讨论】:

  • @DownVoter(s) 请留下评论,说明我的答案为什么是错误的,而不是仅仅投反对票。我链接到的问题准确地描述了 OP 想要什么。
  • 出于好奇,我将如何使用 RTF 进行此操作?
  • TextDataFormat.Rtf?并且显然在字符串 Rtf 中进行格式化
  • 你可能甚至不需要这样的标题。
  • RTF 可以工作,但我如何让它与 textBox.Text 中的变量和字符串一起工作?
猜你喜欢
  • 2014-08-31
  • 2019-03-18
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2011-10-06
相关资源
最近更新 更多