我有一個問題,從我的C#winforms應用程序拖入一個HTML表格到一個外部應用程序(Outlook電子郵件消息),並獲取它作爲表格而不是純文本版本的那張桌子。我知道當你在剪貼板中複製/粘貼時,你必須將表格放在CF_HTML format中,但這似乎不能幫助你拖動表格。有誰知道我錯過了什麼?拖放一個HTML表格到另一個應用程序
回答
ObjectListView支持將文本和HTML版本中的行從ListView複製並拖拽到其他應用程序。要做到這一點,但它確實是這樣的:
DataObject dataObject = new DataObject();
this.CreateTextFormats(dataObject);
Clipboard.SetDataObject(dataObject);
要做到拖放,代碼幾乎是相同的:
DataObject dataObject = new DataObject();
this.CreateTextFormats(dataObject);
DragDropEffects effect = this.DoDragDrop(dataObject, DragDropEffects.All);
CreateTextFormats()並不複雜:
public void CreateTextFormats(DataObject do) {
string textVersion;
string htmlVersion;
// Do the work of making the tab-separated text version and the HTML code
do.SetData(textVersion);
do.SetText(ConvertToHtmlFragment(htmlVersion), TextDataFormat.Html);
}
正確獲取HTML格式需要更長時間:
/// <summary>
/// Convert the fragment of HTML into the Clipboards HTML format.
/// </summary>
/// <remarks>The HTML format is found here http://msdn2.microsoft.com/en-us/library/aa767917.aspx
/// </remarks>
/// <param name="fragment">The HTML to put onto the clipboard. It must be valid HTML!</param>
/// <returns>A string that can be put onto the clipboard and will be recognized as HTML</returns>
private string ConvertToHtmlFragment(string fragment) {
// Minimal implementation of HTML clipboard format
string source = "http://www.codeproject.com/KB/list/ObjectListView.aspx";
const String MARKER_BLOCK =
"Version:1.0\r\n" +
"StartHTML:{0,8}\r\n" +
"EndHTML:{1,8}\r\n" +
"StartFragment:{2,8}\r\n" +
"EndFragment:{3,8}\r\n" +
"StartSelection:{2,8}\r\n" +
"EndSelection:{3,8}\r\n" +
"SourceURL:{4}\r\n" +
"{5}";
int prefixLength = String.Format(MARKER_BLOCK, 0, 0, 0, 0, source, "").Length;
const String DEFAULT_HTML_BODY =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">" +
"<HTML><HEAD></HEAD><BODY><!--StartFragment-->{0}<!--EndFragment--></BODY></HTML>";
string html = String.Format(DEFAULT_HTML_BODY, fragment);
int startFragment = prefixLength + html.IndexOf(fragment);
int endFragment = startFragment + fragment.Length;
return String.Format(MARKER_BLOCK, prefixLength, prefixLength + html.Length, startFragment, endFragment, source, html);
}
正是我需要的,謝謝。 – JohnMcCon 2009-11-10 14:53:22
真棒,巨大的幫助,非常感謝! – yoyo 2011-10-05 22:48:01
很好的例子!一個補充,雖然:正確地複製特殊字符(例如,ÄÖääöüß),我已經在ConvertToHtmlFragment函數的開頭添加此行: fragment = Encoding.Default.GetString(Encoding.UTF8.GetBytes(分段)); (取自:http://msdn.microsoft.com/en-us/library/windows/desktop/ms649015(v=vs.85).aspx) – 2011-10-20 10:35:31
如果您不需要格式化,只需將它作爲製表符分隔的文本複製到剪貼板即可。這樣它就會在Excel中粘貼成一張表格,並且可以推測大多數其他與表格兼容的應用程序。
我確實需要html提供的格式,所以分隔表格不是一個選項。 – JohnMcCon 2009-11-09 05:49:32
- 1. 從一個表格拖放多行到另一個表格
- 2. 拖放應用程序到另一個顯示器屏幕
- 3. 從Silverlight OOB拖放到另一個應用程序
- 4. 使用jQuery將內容從一個表格拖放到另一個表格
- 5. 如何將列表視圖項目從一個應用程序拖放到另一個應用程序?
- 6. 拖/放內部的應用程序,另一個應用
- 7. Jquery Datatable將一行從一個表拖放到另一個表
- 8. 如何將文件從一個應用程序拖放到另一個應用程序在JavaScript或jquery
- 9. GD:拖放到一個PHP表格
- 10. 使用jQuery從一個.NET網格拖放到另一個gridview單元格
- 11. 從一個排序列表拖動到另一個列表4
- 12. UIImageView拖放另一個
- 13. 將JLabel拖放到另一個JLabel上
- 14. 如何將div拖放到另一個
- 15. 如何禁用從一個datagridview到另一個拖放行?
- 16. 如何使用jQuery將一個div拖放到另一個div?
- 17. HTML表格覆蓋另一個表格
- 18. 從一個選項卡表拖放錶行到另一個選項卡表 - jquery
- 19. 如何用相應的圖像拖放一個li到另一個li?
- 20. 使用JQuery UI拖動和從一個輸入控制拖放到另一個
- 21. 從一個應用程序調用會話到另一個應用程序
- 22. 調用另一個另一個應用程序然後回到同一個應用程序之前打開
- 23. 從一個應用程序發送數組到另一個應用程序
- 24. 份額從一個應用程序Excel文件到另一個應用程序
- 25. 將對象從一個應用程序傳遞到另一個應用程序
- 26. 將對象從一個應用程序傳輸到另一個應用程序
- 27. Android - 如何從一個應用程序切換到另一個應用程序?
- 28. 一個Web應用程序如何轉發到另一個Web應用程序?
- 29. jQuery的數據表拖放從一個表中刪除列到另一個
- 30. 需要HTML頁面作爲從一個應用程序到另一個應用程序的響應
winforms中的html表格是什麼?你的意思是webforms? – Kugel 2009-11-09 02:40:01
不,我生成的HTML代碼(作爲字符串),當用戶在應用程序中單擊並拖動網格,然後將其作爲.DoDragDrop方法的數據參數發送時。 – JohnMcCon 2009-11-09 03:07:26
你是說當你複製和粘貼它的作品,但拖放不起作用? – Chris 2009-11-09 05:13:33