根据目标自定义复制/粘贴的内容

本文关键字:目标 自定义 复制 | 更新日期: 2023-09-27 18:36:51

我注意到许多应用程序根据目标应用程序以不同的方式复制和粘贴。例如,如果我在 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;
    }
}

根据目标自定义复制/粘贴的内容

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

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