Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将html表拖放到另一个应用程序中_C#_Html_Winforms_Drag And Drop - Fatal编程技术网

C# 将html表拖放到另一个应用程序中

C# 将html表拖放到另一个应用程序中,c#,html,winforms,drag-and-drop,C#,Html,Winforms,Drag And Drop,我在将html表格从我的C#winforms应用程序拖到外部应用程序(Outlook电子邮件)中,并将其呈现为表格而不是该表格的纯文本版本时遇到问题。我知道,当你复制/粘贴到剪贴板时,你必须把表格放进去,但这似乎无助于拖动表格。有人知道我遗漏了什么吗?如果不需要格式化,只需将其作为制表符分隔的文本复制到剪贴板即可。通过这种方式,它将粘贴为Excel中的表,并且可能是大多数其他与表兼容的应用程序。支持在文本和HTML版本中将行从ListView复制并拖动到其他应用程序。为此,它会执行以下操作: D

我在将html表格从我的C#winforms应用程序拖到外部应用程序(Outlook电子邮件)中,并将其呈现为表格而不是该表格的纯文本版本时遇到问题。我知道,当你复制/粘贴到剪贴板时,你必须把表格放进去,但这似乎无助于拖动表格。有人知道我遗漏了什么吗?

如果不需要格式化,只需将其作为制表符分隔的文本复制到剪贴板即可。通过这种方式,它将粘贴为Excel中的表,并且可能是大多数其他与表兼容的应用程序。

支持在文本和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);
}
//
///将HTML片段转换为剪贴板HTML格式。
/// 
///HTML格式可以在这里找到http://msdn2.microsoft.com/en-us/library/aa767917.aspx
/// 
///要放在剪贴板上的HTML。它必须是有效的HTML!
///可以放在剪贴板上并被识别为HTML的字符串
私有字符串ConvertToHtmlFragment(字符串片段){
//HTML剪贴板格式的最小实现
字符串源=”http://www.codeproject.com/KB/list/ObjectListView.aspx";
常量字符串标记块=
“版本:1.0\r\n”+
“StartHTML:{0,8}\r\n”+
“EndHTML:{1,8}\r\n”+
“StartFragment:{2,8}\r\n”+
“EndFragment:{3,8}\r\n”+
“开始选择:{2,8}\r\n”+
“EndSelection:{3,8}\r\n”+
“SourceURL:{4}\r\n”+
"{5}";
int prefixLength=String.Format(标记块,0,0,0,源,“”).Length;
常量字符串默认\u HTML\u正文=
"" +
"{0}";
stringhtml=string.Format(默认的html正文,片段);
int startFragment=前缀长度+html.IndexOf(片段);
int endFragment=startFragment+fragment.Length;
返回String.Format(MARKER_BLOCK,prefixLength,prefixLength+html.Length,startFragment,endFragment,source,html);
}

winforms中的哪个html表?你是说webforms吗?不,当用户在我的应用程序中单击并拖动网格,然后将其作为.DoDragDrop方法的数据参数发送时,我会生成html代码(作为字符串)。你是说当你复制并粘贴它时,但是拖放不起作用?我确实需要html提供的格式,所以不能选择分隔表。很好的例子!不过还有一个补充:为了正确复制特殊字符(例如,ÄäÜääß),我在ConvertToHtmlFragment函数的开头添加了这一行:fragment=Encoding.Default.GetString(Encoding.UTF8.GetBytes(fragment));(摘自:)