2016-02-29 64 views
4

我注意到,根據目標應用程序的不同,許多應用程序複製和粘貼的方式不同。舉例來說,如果我「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; 
    } 
} 

回答

0

我想你可能只需要以下條件:

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://stackoverflow.com/questions/13332377/how-to-set-html-to-clipboard-in-c – thomasb

+0

很高興我能指出你在正確的方向。 – devuxer