C# winform ClipBord复制Html
剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求。最简单的是,复制一般的.txt文本内容。使用方法
ClipBord.Clear();
ClipBord.SetText(str);
复制 Html,需要把原本的Html内容在包装一层。

在StartFragment和EndFragment之间的内容就是你自己的Html内容了。头部的键值对,键必须一样,值需要自己计算。
之间可以是Html内容,也可以是整个Html标签包含的内容,还包括Html标签。
我在网上找了个现成的方法,已经实验过了,是可以得:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | public string HtmlFData( string html) { StringBuilder sb = new StringBuilder(); Encoding encoding = Encoding.UTF8; //Encoding.GetEncoding(936); string Header = @" Version: 1.0 StartHTML: {0:000000} EndHTML: {1:000000} StartFragment: {2:000000} EndFragment: {3:000000} " ; string HtmlPrefix = @" <!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN""> <!--StartFragment--> " ; string HtmlSuffix = @" <!--EndFragment--> " ; // Get lengths of chunks int HeaderLength = encoding.GetByteCount(Header); //注意这里这样做,不直接取字符长度,是中文utf8占3字节,不是unicode的英文下的1字节 HeaderLength -= 16; // extra formatting characters {0:000000} int PrefixLength = encoding.GetByteCount(HtmlPrefix); int HtmlLength = encoding.GetByteCount(html); int SuffixLength = encoding.GetByteCount(HtmlSuffix); // Determine locations of chunks int StartHtml = HeaderLength; int StartFragment = StartHtml + PrefixLength; int EndFragment = StartFragment + HtmlLength; int EndHtml = EndFragment + SuffixLength; // Build the data sb.AppendFormat(Header, StartHtml, EndHtml, StartFragment, EndFragment); sb.Append(HtmlPrefix); sb.Append(html); sb.Append(HtmlSuffix); return sb.ToString(); } |
然后,复制到剪贴板的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var data = HtmlFData(strHtml); MemoryStream sMem = new MemoryStream(); byte [] byteHtml = Encoding.UTF8.GetBytes(data); sMem.Write(byteHtml, 0, byteHtml.Length); sMem.Flush(); var dataObject = new DataObject(); dataObject.SetData(DataFormats.Html, sMem); Clipboard.SetDataObject(dataObject); ... sMem.Close(); |
注意如果你直接用SetText这个api,并设置了Html格式,中文是会乱码的,所以这里用内存流把字符转为了utf-8的字节嘛保存的流对象里。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现