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

问题描述:

我注意到,根据目标应用程序的不同,许多应用程序复制和粘贴的方式不同。举例来说,如果我“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); 
+0

谢谢,但它并没有为文本的工作,它总是副本。我也尝试过'Clipboard.SetDataObject(new DataObject(“Html”,htmlContent.ToString()));'但它不允许“粘贴”。 – thomasb

+0

感谢您的回答,我搜索了更多,并找到了答案在http://*.com/questions/13332377/how-to-set-html-to-clipboard-in-c – thomasb

+0

很高兴我能指出你在正确的方向。 – devuxer