1、概述
      在WinForm开发中,您可能会碰到发送邮件时内容编辑的问题,大部分开发人员第一个想法是希望将 WinForm中的内容编辑器做到和.NET

中类似FCK一样。今天我们就来介绍下如何实现和FCK一样的内容编辑器功能。

2、正文
     邮件内容编辑器的问题,在网上搜索一下,碰到这个的问题的人还不少,大多数开发者参考的下面这篇文章中的内容:http://www.codeproject.com/cs/miscctrl/editor_in_windows_forms.asp且不说这篇文章中实现的方法的好坏。但里面包含的Microsoft.MSHTML.dll,动辄7M多,实在是让人看了不舒服。又或是利用WindowsLive.Writer.Interop.Mshtml和WindowsLive.Writer.Mshtml两个组件来实现,维护起来相当麻烦,代码就更不好看懂了。今天我向大家介绍一种新的内容编辑器的实现,彻底解决上述的问题,总大小不过几百KB。

首先我们来分析下实现的原理。在上述那个例子中,它利用C#中的webBrowser控件和HTML交互达到的内容编辑器的效果,但它的实现却是需要去完成单个单个的功能最后组合而成,例如,实现剪切的功能的核心代码:

1 public void Cut()
2 {
3     webBrowser1.Document.ExecCommand("Cut", false, null);
4 }
5 public void Bold()
6 {
7    webBrowser1.Document.ExecCommand("Bold", false, null);
8 }

这种方法是不是太过复杂?!而且维护起来也不方便。既然是webBrowser和HTML的交互实现原来,那为什么我们不直接做一个纯HTML的邮件编辑器,然后再来和webBrowser交互呢?!这就是我今天要介绍方法的核心原理。下面我们来看看它的实现过程:
第一步:纯HTML内容编辑器
其实这一步最简单,基本上您在网上搜索HTML内容编辑器,就会有一大堆出现在您面前。既然是纯HTML的,记住一定是双击既可以打开预览的。如图:

当然了,我们还是要写一点必要的JS,便于获取和设置从webBrowser控件传出来的内容。

<script>
//获取邮件内容
function GetContent(){
    return editor.html();
}
function GetTitile(){
    return document.getElementById('txttile').value;
}
function GetFileUrl(){
    return document.getElementById('txtfile').value;
}
function SetTitile(arg){
    document.getElementById('txttile').value=arg;
}
function SetContent(arg){
    editor.html(arg);}
</script>

第二步:内容交互
这里比较简单,就是一个从webBrowser1中执行JS函数的核心代码:

webBrowser1.Document.InvokeScript("SetContent", objArray);

其他部分,没什么好说明的,直接看代码吧。

View Code

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.Security.Permissions; //需加的
10 
11 namespace EmailEdit
12 {
13     [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]//需加的
14     [System.Runtime.InteropServices.ComVisibleAttribute(true)]//需加的 
15     public partial class SendEmail : Form
16     {
17         public SendEmail()
18         {
19             InitializeComponent();
20         }
21 
22         private void SendEmail_Load(object sender, EventArgs e)
23         {
24             webBrowser1.Navigate(Application.StartupPath + "/edit/editemail.html");
25         }
26 
27         //获取邮件信息
28         private void button1_Click(object sender, EventArgs e)
29         {
30             string strtitle = webBrowser1.Document.InvokeScript("GetTitile").ToString();
31             string strfile = webBrowser1.Document.InvokeScript("GetFileUrl").ToString();
32             string strcontent = webBrowser1.Document.InvokeScript("GetContent").ToString();
33             MessageBox.Show("邮件的标题是:" + strtitle + "\n" + "附件:" + strfile + "\n" + "内容:" + strcontent);
34         }
35 
36         //设置邮件信息 
37         private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
38         {
39             //邮件标题
40             string strtitle = "这是标题";
41             Object[] objArray = new Object[1];
42             objArray[0] = (Object)strtitle;
43             webBrowser1.Document.InvokeScript("SetTitile", objArray);
44 
45             //邮件内容
46             string name = @"<font color=""#FF0000""><h1>hello world</h1></font>!sendry lee.";
47             objArray = new Object[1];
48             objArray[0] = (Object)name;
49             webBrowser1.Document.InvokeScript("SetContent", objArray);
50         }
51     }
52 }

第三步:运行
看实现的效果和图片吧:

如果对您有帮助别忘了分享给其他人,感谢您的阅读!

转载于:https://www.cnblogs.com/sendrylee/archive/2012/05/24/WinForm%E9%82%AE%E4%BB%B6%E5%86%85%E5%AE%B9%E7%BC%96%E8%BE%91%E5%99%A8.html

WinForm邮件内容编辑器的简单实现相关推荐

  1. python发邮件和网络的简单使用

    一.Excel文档操作练习(pycharm) sorted() 函数对所有可迭代的对象进行排序操作. sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所 ...

  2. python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)...

    简介 本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理.在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下, ...

  3. python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上

    简介 本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理.在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下, ...

  4. 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...

    用于工作需求接触了公告通知标题内容的无缝向上滚动功能以及使用简单的wang富文本编辑器配置简单的音乐插件demo. 在写之前要先引入相应的js,jquery: 首先是通知标题的无缝向上滚动,这个网上很 ...

  5. 为什么每个邮件收到后都会有一个htm的附件_Python3.x 发送各种形式的告警邮件内容...

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.短信.微信等方式通知管理员,邮件目前用的最多的通知方式.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调用运营 ...

  6. Linux笔记:文本编辑器nano简单说明

    文章目录 目的 快速使用 常用命令 nano语法 常用选项 总结 目的 pico是Linux上的一个文本编辑器,nano是从pico发展而来的文本编辑器(很多系统上你使用pico命令打开的也是nano ...

  7. vim编辑器的简单使用(参考别人文章的学习笔记)

    vim编辑器的简单使用(参考别人文章的学习笔记) vim编辑器是linux下最常用的文本编辑器之一 vim的三种模式 命令模式:进入vim后即在命令模式下,或者在任意模式下按ESC键 输入模式:在命令 ...

  8. python 邮件_Python发送邮件(常见四种邮件内容)

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...

  9. python 读取邮件内容_python获取邮件内容(邮件内容为html)

    用python获取邮件内容比较简单,直接用现成的imap和pop3包即可,但是有时候邮件的内容不是plainText而是html甚至是一个url链接,原本的操作流程是点击url获取内容(比如csv等等 ...

最新文章

  1. 对标英伟达,依图发布AI芯片“求索”
  2. 团队竞争力有多强,你的企业就能走多远
  3. 【重点】Java大厂面试10个知识点汇总
  4. android 自定义键盘字体大小,android.inputmethodservice.KeyboardView 自定义键盘 字体大小设置...
  5. React中级学习(第二天)
  6. 零基础学习ruby_学习Ruby:从零到英雄
  7. 对SqlServer2008中的日志进行截断的方法
  8. 数据结构----排序
  9. html中如何计算图片的像素,html – 浏览器的1px计算问题(子像素问题)
  10. 国内首个比特币勒索病毒案告破,三年获利 500 万!
  11. 【转载】架构师速成-如何高效编程
  12. 2022 php面试题(含答案)
  13. 宅家必备 | 笔记本开启WiFi共享
  14. highcharts制作3D饼图渐变效果
  15. Kali之Crunch:自定义字典
  16. OSPF 总结—— ospf邻居关系无法建立原因 + OSPF选路影响因素
  17. ar vr mr 计算机技术,VR、AR、MR、还有云计算,他们到底是什么?
  18. 关于object对象转换为int类型
  19. sed命令详解及运用
  20. 武大计算机系雷军,马化腾739分、雷军700分系湖北状元!大佬们的高考成绩让人敬畏!...

热门文章

  1. Java类集框架 —— LinkedHashMap源码分析
  2. Django templates 和 urls 拆分
  3. 一起玩转CoordinatorLayout
  4. Linux中断(interrupt)子系统之五:软件中断(softIRQ)
  5. SRV记录注册不成功的可能的原因
  6. Apache + Tomcat 配置多个应用
  7. 关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法
  8. 使用fastjson进行json字符串和List的转换
  9. 如何使用idea快速创建SpringBoot项目
  10. Django博客--3.创作后台开启