根据目标自定义复制/粘贴的内容
问题描述:
我注意到,根据目标应用程序的不同,许多应用程序复制和粘贴的方式不同。举例来说,如果我“HTML复制”在TFS的项目(在网络接口):根据目标自定义复制/粘贴的内容
- ,如果我把它贴在记事本中,我得到一个CSV状输出
- ,如果我把它粘贴在Excel中,我得到很好的格式化的行和列
- ,如果我把它贴在Outlook中,我得到一个非常漂亮的表
我曾尝试使用的Clipboard.SetText(String, TextDataFormat)
多个实例与不同TextDataFormat
值,但很可惜,他们互相覆盖其他(除了TextDataFormat.Text
以外的任何东西都不会“允许”pa刺)。
我迄今为止尝试:
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);
谢谢,但它并没有为文本的工作,它总是副本。我也尝试过'Clipboard.SetDataObject(new DataObject(“Html”,htmlContent.ToString()));'但它不允许“粘贴”。 – thomasb
感谢您的回答,我搜索了更多,并找到了答案在http://*.com/questions/13332377/how-to-set-html-to-clipboard-in-c – thomasb
很高兴我能指出你在正确的方向。 – devuxer