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.gifView 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上位机软件控制下位机PHP,采用stm32f103CB硬件I2C1/2(自制硬件)中断/DMA访问,四轴开源程序,DMP,PCB外框图纸库文件,USBToVCOM代码下位机...

四轴的ROLL&#xff0c;PITCH&#xff0c;YAW的部分算法程序&#xff1b;//二阶毕卡法void IMUupdate(float* Roll, float* Pitch, float* Yaw,float gx, float gy, float gz,float ax, float ay, float az, float* fusionDt){#ifdef IMUMpu_Setfloat delta_20;// float gx, gy…

LeetCode 1245. 树的直径(图的最大直径结论)

文章目录1. 题目2. 解题1. 题目 求树的最大直径。 2. 解题 类似题目&#xff1a;LeetCode 5538. 统计子树中城市之间最大距离&#xff08;枚举所有可能图的最大直径&#xff09; 结论&#xff1a;求无权无向图中的最长一条路径 先从任意一点P出发&#xff0c;找到离它最远的…

64 位 win7(2008 r2) 使用PLSQL Developer x86 32bit的解决方法

64 位 win7 使用PLSQL Developer 由于 PLSQL Developer 没有64位版本&#xff0c;所以在64位系统上运行该程序会报错&#xff0c;笔者为这个问题纠结了好几天&#xff0c;后来通过请教Google 动手实践&#xff0c;终于搞定了这个问题。现在把笔者解决的过程记录下来&#xff…

python的序列类型包括哪三类,Python常用的序列类型包括列表、元组和字典三种。...

表示M型&#xff0c;常用统中库管理系数据。边际位人的人消费每增增加加1均收均消倾向个单出数入所费支是指&#xff0c;列类边际消费民的年农倾向村居是(。的家品消庭食9年则2居民城镇出为费支&#xff0c;型包庭以3口镇家若城人计算。括列北省的份控股有及额为年国占河企业国…

LeetCode 545. 二叉树的边界(前序+后序)*

文章目录1. 题目2. 解题1. 题目 给定一棵二叉树&#xff0c;以逆时针顺序从根开始返回其边界。 边界按顺序包括左边界、叶子结点和右边界而不包括重复的结点。 (结点的值可能重复) 左边界的定义是从根到最左侧结点的路径。 右边界的定义是从根到最右侧结点的路径。 若根没有左…

解决“第一次偶然出现的异常”问题

现象 调试阶段&#xff0c;VS在“调试-输出”窗口中输出类似以下的异常信息&#xff1a; 在 System.ServiceModel.MessageHeaderException 中第一次偶然出现的“System.ServiceModel.dll”类型的异常.但代码继续正常执行&#xff0c;应用程序也未出错关闭。 解决 1、打开菜单“…

centos 7 ssh 安装mysql,Linux服务器远程ssh为centos7安装MySQL

最近为客户选了个云服务器操作系统选择CentOS 7.0 64位通过ssh远程安装MySQL5.6&#xff0c;与大家分享安装过程ssh远程客户端选择的是xshell,感觉比较好用&#xff0c;可以直接通过绑定的xftp进行远程目录的上传下载操作通过xshell先连接远程服务器&#xff0c;指定服务器ip&a…

LeetCode 333. 最大 BST 子树(递归)*

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;找到其中最大的二叉搜索树&#xff08;BST&#xff09;子树&#xff0c; 其中最大指的是子树节点数最多的。 注意: 子树必须包含其所有后代。 示例: 输入: [10,5,15,1,8,null,7]10 / \ 5 15 / \ \ 1 8 7 输…

sql server :distinct 与order by 一起使用要注意

一次在sql server 2008 中写sql语句&#xff1a;select distinct firstname,lastname from person order by person_id 错误提示&#xff1a; Msg 145, Level 15, State 1, Line 1ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 哦&#xff…

LeetCode 663. 均匀树划分(树形DP)

文章目录1. 题目2. 解题1. 题目 给定一棵有 n 个结点的二叉树&#xff0c;你的任务是检查是否可以通过去掉树上的一条边将树分成两棵&#xff0c;且这两棵树结点之和相等。 样例 1: 输入: 5/ \10 10/ \2 3 输出: True 解释: 5/ 10和: 1510/ \2 3和: 15样例 2: 输入…

oracle磁带库清洁带标签,磁带库、磁带机和介质支持

44803480348044903480、3490E348048903480、3490E348094903480、3490E34809490EE3480(只读)、3490E、EECART3480SD3DD3A、DD3B、DD3CDD3D9840STK1RSTK1U9840-3590STK1RSTK1UT9840BSTK1RSTK1UT9840B35STK1RSTK1UT9840CSTK1RSTK1UT9840C35STK1RSTK1UT9840DSTK1RSTK1YT9840D35STK1…

简单的Client / Server 使用 linux 伯克利 socket实现

服务器&#xff1a; /**run command:* g server.cpp -o server && ./server*/#ifndef SERVER #define SERVER#include<arpa/inet.h> #include<assert.h> #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<errno.h…

LeetCode 261. 以图判树(全部连通+边数=V-1)

文章目录1. 题目2. 解题1. 题目 给定从 0 到 n-1 标号的 n 个结点&#xff0c;和一个无向边列表&#xff08;每条边以结点对来表示&#xff09;&#xff0c; 请编写一个函数用来判断这些边是否能够形成一个合法有效的树结构。 示例 1&#xff1a; 输入: n 5, 边列表 edges …

oracle自增自删分区的脚本,oracle实现自增方法(错误ora-04098解决)

mysql实现自增很简单&#xff0c;在主键处加上auto_increment关键字就可以了&#xff0c;而oracle实现起来并不是这么容易的&#xff0c;需要借助序列和触发器才能实现。具体代码如下&#xff1a;1.建立一个表&#xff1a;create table 户口本 (户号 INTEGER not null,户别 CHA…

php实现数字滚动效果,vue如何实现数字滚动增加效果?代码示例

项目中需要做数字滚动增加的效果&#xff0c;一开始很懵&#xff0c;研究了一下原理&#xff0c;发现很简单&#xff0c;贴出来分享一下 ^_^数字滚动组件&#xff1a;0props: {time: {type: Number,default: 2},value: {type: Number,default: 720000}},methods: {numberGrow (…

LeetCode 1061. 按字典序排列最小的等效字符串(并查集)

文章目录1. 题目2. 解题1. 题目 给出长度相同的两个字符串&#xff1a;A 和 B&#xff0c;其中 A[i] 和 B[i] 是一组等价字符。 举个例子&#xff0c;如果 A "abc" 且 B "cde"&#xff0c;那么就有 a c, b d, c e。 等价字符遵循任何等价关系的一般…

SheevaPlug是什么,有什么用途

简单说 SheevaPlug 是由 ARM CPU加上 Linux 作业系统的小型计算机, 用一个手掌就可以托住其中 CPU 是 1.2GHz 主频, 512MB DDR2, 512MB NAND Flash, 1个 USB口以及1个外接 SD 卡槽这个小计算机瑞安装了 linux 2.6.x 以及 debian 5.0 文件系统,拿到这个 sheevaplug 后你可以自行…

导出oracle表中数据,从Oracle中导出数据表!

C:\Documents and Settings\Administrator>expExport: Release 9.2.0.1.0 - Production on 星期四 12月 7 12:52:05 2006Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.用户名: peam口令:连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - …

LeetCode 366. 寻找二叉树的叶子节点(上下翻转二叉树+BFS)

文章目录1. 题目2. 解题1. 题目 给你一棵二叉树&#xff0c;请按以下要求的顺序收集它的全部节点&#xff1a; 依次从左到右&#xff0c;每次收集并删除所有的叶子节点重复如上过程直到整棵树为空 示例: 输入: [1,2,3,4,5]1/ \2 3/ \ 4 5 输出: [[4,5,3],[2],[1]…

白话地图投影之初识地球

本文是Koala带你进入GIS世界的开篇&#xff0c;Koala打算用简单通俗的语言为大家介绍地图投影&#xff0c;帮助GISer理解地图投影的概念。作为进入GIS世界多年的老鸟&#xff0c;Koala也是在不断的实战中才真正理解和掌握地图投影的奥秘。 我们生活的地球长啥模样&#xff1f; …