WinForm邮件内容编辑器的简单实现

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 "falsenull);
4 }
5  public  void Bold()
6 {
7    webBrowser1.Document.ExecCommand( " Bold "falsenull);
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);

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

ExpandedBlockStart.gif 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值