【问题标题】:Customize copied/pasted content depending on target [duplicate]根据目标自定义复制/粘贴的内容[重复]
【发布时间】:2016-02-29 09:13:58
【问题描述】:

我注意到许多应用程序复制和粘贴的方式因目标应用程序而异。例如,如果我在 TFS 中“HTML 复制”一个项目(在 Web 界面中):

  • 如果我将它粘贴到记事本中,我会得到类似 csv 的输出
  • 如果我将其粘贴到 Excel 中,我会得到格式正确的行和列
  • 如果我将它粘贴到 Outlook 中,我会得到一个漂亮的表格

我尝试使用具有不同TextDataFormat 值的Clipboard.SetText(String, TextDataFormat) 的多个实例,但可惜它们会相互覆盖(除TextDataFormat.Text 之外的任何东西似乎都不允许“粘贴”)。

到目前为止我所尝试的:

private static void KeyPressed(KeyEventArgs e, GridView grid)
{
    if (e.Control && e.KeyCode == Keys.C)
    {
        var textContent = new StringBuilder();
        var htmlContent = new StringBuilder("<table>");

        // build content
        for (int i = 0; i < 10; i++)
        {
            htmlContent.AppendFormat("<tr><td>{0}</td></tr>", i);
            textContent.AppendFormat("{0}\t", i);
        }

        textContent.Length--; // remove last tab
        htmlContent.Append("</table>");

        // send contents to clipboard
        Clipboard.Clear();
        Clipboard.SetText(textContent.ToString(), TextDataFormat.CommaSeparatedValue);
        Clipboard.SetText(textContent.ToString(), TextDataFormat.Text);
        Clipboard.SetText(htmlContent.ToString(), TextDataFormat.Html);

        e.Handled = true;
        e.SuppressKeyPress = true;
    }
}

【问题讨论】:

    标签: c# .net clipboard


    【解决方案1】:

    我认为您可能只需要以下内容:

    var dataObject = new DataObject(textContent); // allows data to auto-convert on paste
    Clipboard.SetDataObject(dataObject);
    

    【讨论】:

    • 谢谢,但它不起作用,它总是复制为文本。我也尝试过Clipboard.SetDataObject(new DataObject("Html", htmlContent.ToString()));,但它不允许“粘贴”。
    • 感谢您的回答,我搜索了更多,并在stackoverflow.com/questions/13332377/…找到了答案
    • 很高兴我能够为您指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2013-11-27
    • 2015-10-06
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多