Winform开发框架之HTML编辑控件

我们知道,在做Web开发的时候,很多控件可以用来做HTML内容编辑的,Winform开发就相对少很多,不过很多时候,我们在做Winform开发的时候,也是需要处理这样的场景的。例如发送HTML邮件内容的时候,在给客户编写内容丰富的反馈意见或者邮件的时候等等,因此有必要做一个支持好HTML格式,支持图片插入等丰富内容的控件。

本文就是介绍这么一个控件,这个控件增加了一些常见HTML格式的工具栏操作,并且改良支持Win7系统下的内容编辑(一般WebBrowser包装类,在Win7下内容会变得不可编辑),本控件不会有这个问题。另外,一般WebBrowser需要客户端有Microsoft.MSHTML.dll,这个文件7M多,一般开发的机器上会有,但普通用户的电脑就不一定有这个文件,而且这个文件很大,非常不适合软件的部署。本控件使用WindowsLive.Writer.Interop.Mshtml和WindowsLive.Writer.Mshtml两个小文件来替代Microsoft.MSHTML.dll这个庞然大物的dll。

下面是一个在Winform开发框架中用于意见反馈的场景,里面可以使用丰富的HTML格式,可以插入图片等操作,如下所示。

打开问题反馈出现下面的HTML内容编辑界面

由于我是把反馈信息作为邮件发送的,因此,插入的本地图片,也会作为嵌入内容写入到邮件当中,在邮件内容中插入嵌入图片是一个有点技术含量的工作,不同于一般的邮件附件,他是把图片字节写在邮件的同时,也同时修改邮件内容的图片应用为cid:***这样的路径格式。收到的邮件如下所示。

由于发送邮件是常见的操作,因此我把它集成在我的公用类库(详细参考《公用类库系列文章》)里面去了,因此发送邮件(可带附件、HTML内容带嵌入图片)是一件很轻松的事情,发送邮件的详细介绍在我前面一篇随笔《厚积薄发,丰富的公用类库积累,助你高效进行系统开发(12)--- 网络相关操作辅助类》有具体的介绍,下面摘录下来强调一下。

1、发送邮件的辅助类 EmailHelper。  

实现效果

1)  本辅助类主要是用来方便实现发送邮件操作,可以发送附件、嵌入图片、HTML等内容邮件。使用底层SMTP协议指令进行发送,成功率较高。 

2)邮件发送可以用在客户反馈,信息推广,客户沟通,员工交流等方面业务需要。

实现代码

1)辅助类提供的方法源码如下所示: ..............省略..............

2)辅助类EmailHelper的使用例子代码如下所示

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");
email.Subject = "伍华聪的普通测试邮件";
email.Body = string.Format("测试邮件正文内容");
email.IsHtml = true;
email.From = "wuhuacong2013@163.com";
email.FromName = "wuhuacong2013";
email.AddRecipient("6966254@qq.com");
try
{
    bool success = email.SendEmail();
    MessageUtil.ShowTips(success ? "发送成功" : "发送失败");
}
catch (Exception ex)
{
    MessageUtil.ShowError(ex.Message);
}  

3)如果使用发送附件、发送嵌入图片(正文中有图片显示内容的)方式,则例子代码如下所示。

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");
email.Subject = "伍华聪的图片附件测试邮件";
string embedFile = Path.Combine(Application.StartupPath, "cityroad.jpg");
email.Body = string.Format("测试邮件正文内容<img src=\"{0}\" title='测试图片' /> ", embedFile);
email.IsHtml = true;
email.From = "wuhuacong2013@163.com";
email.FromName = "wuhuacong2013";
email.AddRecipient("6966254@qq.com");
email.AddAttachment(Path.Combine(Application.StartupPath, "ringin.wav"));//.AddAttachment("C:\\test.txt");    

try
{
    bool success = email.SendEmail();
    MessageUtil.ShowTips(success ? "发送成功" : "发送失败");
}
catch (Exception ex)
{
    MessageUtil.ShowError(ex.Message);
}  

其实该控件还可以改造成HTML内容显示控件,不过由于涉及要将服务器的图片文件下载并保存到一个目录,并修改HTML内容中图片的路径以便进行显示,修改内容的时候,还得记住那些图片是原有的,新增的图片才提交到服务器即可,不过这样就会搞得比较复杂一点。大家如果有好的建议可以讨论下。

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之HTML编辑控件,如需转载请自行联系原博主。

时间: 2024-10-22 05:44:51

Winform开发框架之HTML编辑控件的相关文章

基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文主要介绍在MVC界面里面,CKEditor的配置和使用.CKEditor的前身是FCKEditor,随着它的更新,上传图片的功能被分离出去了,现在如果需要实现上传图片,要么自己写代码或者采用其他上传控件(如Uploadify),还有一种方法是使用CKFinder,这两者的合并使用,能给我们带来更多的方便. 1.CKEditor的使用 CKEditor的下载地址是http://ckeditor.

WinForm界面开发之“HTML内容编辑控件”

做过了很多Winform的共享软件,对界面的设计有了一定的经验和积累,准备开一个"WinForm界面开发"系列文章,介绍下相关的Winform界面设计和相关控件的使用,促进相互交流,以获得更好的发展和了解. 在很多Winform程序中 ,我们可能需要HTML内容的所见即所得的编辑控件,如Asp.net中的FreeTextBox等控件样式的. 搜索了一下,发现很少这方面的控件,找了一个,好像是收费的,而且感觉一般,跳过,再找,然后发现CodeProject 上有一个不错的东西,拿过来进行

winform程序对界面上控件的统一控制【二】组件版

继上篇文章winform 程序对界面上控件的统一控制[一](赋值\清空\验证- -) ,本篇文章将实现一个同样功能的Component(组件). 先看看组件的实现,如下所示: 代码一 public partial class CtrlValidation : Component { public CtrlValidation() { InitializeComponent(); typeCache = new TypeCache(); } public CtrlValidation(IConta

WinForm界面开发之“分页控件”

在程序中,分页总是永远的话题,因为数据总是很多很多,分页展示在程序性能和数据查看感官方面得到很好的平衡,是一种良好的编程习惯和UI设计. Winform中的分页控件可能没有Asp.net世界中的分页控件那么丰富多彩,不过也有不少的分页控件可以采用,各个人的可能都有一些不同的东西,一些好的东西.就我而言,我希望控件能够尽可能的多一些功能,耦合性低一些,例如我不想是基于存储过程的,因为我很多程序需要使用Access作为数据库,一般来说,我还希望有导出Excel数据的功能,还有打印预览功能,由于我的数

datagridview-C# DataGridView列编辑控件显示问题

问题描述 C# DataGridView列编辑控件显示问题 各位高手, 我在调整界面布局时,遇到这样一个问题, 在datagridView中有一个日期列,一个数字列,当我分别点击该列,会分别出现一个dateTimePicker, NumbericUpDown控件进行编辑. 我调整布局,将该dataGridView放入一个TableLayoutPanel后,这两个编辑控件就不出来了.不知何原因,寻求帮助,谢谢! 下面是代码 private void dataGridView_CellDoubleC

panel-C# winform 如何实现将PictureBox控件拖动到任意的Panel控件中。

问题描述 C# winform 如何实现将PictureBox控件拖动到任意的Panel控件中. 在C# winform中,有一个form窗体,在form窗体中包函四个Panel控件(panel1.panel2.panel3.panel4)以及多个PictureBox控件. 请问,如何实现将PictureBox控件手动拖动到任意一个Panel控件中,且充满当前拖动到目标的Panel控件中显示. 最好提供相关的源码或参考资料,谢谢. 解决方案 是运行时拖动么?你需要处理drug事件,然后在容器接收

panel-C# winform 如何实现将Label控件的文本内容拖动到任意的Panel控件中。

问题描述 C# winform 如何实现将Label控件的文本内容拖动到任意的Panel控件中. 在C# winform中,有一个form窗体,在form窗体中包函四个Panel控件(panel1.panel2.panel3.panel4)以及三个Label控件(label1.label2.label3). 目前需要实现如下拖动效果: 1.要求将label1控件的text文本内容,手动拖动到任意一个Panel控件中居中显示label1控件text文本内容. 2.并且要求将拖动到Panel控件中的

winform-C# WinForm 程序能使用FileUpload控件吗?为什么我在工具箱找不到该控件!

问题描述 C# WinForm 程序能使用FileUpload控件吗?为什么我在工具箱找不到该控件! RT! C# WinForm 程序能使用FileUpload控件吗?为什么我在工具箱找不到该控件! 解决方案 C#控件与工具箱C#FileUpLoad控件使用C# WinForm程序中使用Unity3D控件 解决方案二: winform里没有这个控件,你可以用textbox和botton做一个,然后后台写点击事件就可以了http://img.bbs.csdn.net/upload/201308/

WebOffice网页编辑控件 v6.0

WebOffice网页编辑控件 v6.0   http://www.myfiles.com.cn/soft/10/10889.htm     WebOffice是一款由北京点聚信息技术有限公司提供的完全免费(商业用途也免费)且功能强大的在线Word/excel/wps编辑辅助控件,可以实现: 1.在线编辑Word.Excel.PPT.WPS... ... 2.全面支持MS Office的界面定制,包括对于Office2007的全面支持 3.修订留痕 4.限制打印.保存.复制 5.直接保存到服务器