/// <summary>
///
/// </summary>
public partial class Form2 : Form
{ private mshtml.IHTMLDocument2 hc;
private mshtml.HTMLDocument hc1;
//subdir in ApplicationData Folder, change whatever you think
private const string M_WORKPATH = "someMCEenabledFolder";
//easilly navigate into resources
private const string M_RESOURCE = "WF_tinyMCE";
/// <summary>
///
/// </summary>
public override string Text
{
get
{
return m_text;
}
set
{
m_text = value;
}
}
/// <summary>
///
/// </summary>
/// <param name="source"></param>
/// <param name="target"></param>
public void CopyFile(Stream source, Stream target)
{
byte[] buffer = new byte[0x10000];
int bytes;
try
{
while ((bytes = source.Read(buffer, , buffer.Length)) > )
{
target.Write(buffer, , bytes);
}
}
finally
{
target.Close();
}
} /// <summary>
/// Get the correct internal path where tinyMCE and work file will be stored
/// </summary>
/// <param name="subPath"></param>
/// <returns></returns>
private string getWorkPath(string subPath)
{
string AppFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
return System.IO.Path.Combine(AppFolder, M_WORKPATH + "\\" + subPath);
} private string m_strMCEDir = "";
private string m_strMCESettings = "";
/// <summary>
/// Prepare tinyMCE package
/// </summary>
public void PrepareTinyMCE()
{
string sCpy = getWorkPath("tinyMCE.zip");
m_strMCEDir = getWorkPath("tinyMCE");
m_strMCESettings = getWorkPath("tinyMCE.txt");
if (!Directory.Exists(getWorkPath("")))
{
Directory.CreateDirectory(getWorkPath(""));
} string sMCE = "tinyMCE\\tinyMCE\\jscripts\\tiny_mce";
if (!Directory.Exists(m_strMCEDir) || !File.Exists(getWorkPath(sMCE) + "\\tiny_mce.js"))
{
string sMce = M_RESOURCE + ".resources.tinyMCE.zip";
Stream strFile = GetResourceFile(sMce);
FileStream fs = new FileStream(sCpy, FileMode.OpenOrCreate);
CopyFile(strFile, fs);
strFile.Close(); Directory.CreateDirectory(m_strMCEDir);
FastZip fz = new FastZip();
fz.ExtractZip(sCpy, m_strMCEDir, FastZip.Overwrite.Never, null, null, null);
File.Delete(sCpy);
}
//settings
{
string sMce = M_RESOURCE + ".resources.tinyMCE.txt";
Stream strFile = GetResourceFile(sMce);
StreamReader sr = new StreamReader(strFile);
m_strMCESettings = sr.ReadToEnd();
sr.Close();
}
m_strMCEDir = sMCE;
}
/// <summary>
///
/// </summary>
/// <param name="File"></param>
/// <returns></returns>
public Stream GetResourceFile(string File)
{
if (File == null || File == "")
return null;
try
{
return this.GetType().Assembly.GetManifestResourceStream(File);
}
catch (Exception)
{
return null;
}
}
/// <summary>
///
/// </summary>
public void doInit()
{
object empty = System.Reflection.Missing.Value;
//mshtml.IHTMLDocument doc2 =webBrowser1.Document;
//IHTMLDocument2 doc = (mshtml.IHTMLDocument2)webBrowser1.Document;
//webBrowser1.Document.Write("<html><body></body></html>");
//webBrowser1.Document.Body.innerHTML = "";//
//this.webBrowser1.Navigate("about:blank", ref empty, ref empty, ref empty, ref empty);
this.webBrowser1.Navigate("about:blank");
hc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument;//(mshtml.IHTMLDocument2) } private string m_text = "", m_type = "", m_css = "";
/// <summary>
///
/// </summary>
/// <param name="Text"></param>
public void ShowText(string Text)
{
m_text = Text;
showText(false);
this.Show();
//this.Dispose();
}
/// <summary>
///
/// </summary>
/// <param name="Text"></param>
/// <param name="Type"></param>
/// <param name="CSSFile"></param>
/// <returns></returns>
public string EditText(string Text, string Type, string CSSFile)
{
m_text = Text;
m_type = Type;
m_css = CSSFile;
PrepareTinyMCE();
showText(true);
this.ShowDialog();
m_text = ((mshtml.IHTMLDocument3)webBrowser1.Document.DomDocument).getElementById("elm1").innerText;
return m_text;
//this.Dispose();
} /// <summary>
///
/// </summary>
/// <param name="edit"></param>
private void showText(bool edit)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("<HTML><HEAD><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" content=\"no-cache\">");
if (edit && !string.IsNullOrEmpty(m_strMCESettings))
{
sb.Append("<script type=\"text/javascript\" src=\"");
sb.Append(this.m_strMCEDir.Replace('\\', '/')); //IE compatible
sb.AppendLine("/tiny_mce.js\">");
sb.AppendLine("</script>");
sb.AppendLine(this.m_strMCESettings);
sb.AppendLine("</HEAD><BODY><FONT FACE=\"Arial\" SIZE=\"-1\">");
sb.AppendLine("<form method=\"\" action=\"\" onsubmit=\"return false;\">");
sb.AppendLine("<textarea id=\"elm1\" name=\"elm1\" style=\"width: 100%;height:100%\">");
}
else
{
sb.AppendLine("</HEAD><BODY><FONT FACE=\"Arial\" SIZE=\"-1\">");
}
sb.AppendLine(m_text);
if (edit && !string.IsNullOrEmpty(m_strMCESettings))
{
sb.AppendLine("</textarea>");
}
sb.AppendLine("</FONT></BODY></HTML>"); //get CSS to local folder
if (File.Exists(m_css))
{
File.Copy(m_css, getWorkPath(m_type + ".css"), true);
m_css = m_type + ".css";
}
string t = sb.Replace("[CSS]", m_css).ToString();
string sDoc = getWorkPath(m_type + ".html");
StreamWriter sw = new StreamWriter(sDoc, false, System.Text.Encoding.GetEncoding());
sw.Write(t);
sw.Close();
try
{
this.webBrowser1.Navigate(sDoc);
}
catch (Exception e)
{
string s = e.Message;
}
}
/// <summary>
///
/// </summary>
public Form2()
{
InitializeComponent(); doInit();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form2_Load(object sender, EventArgs e)
{
//EditText("tinyMCE涂聚文 intergrated into .NET."
//+"A bit uncomfortable way through IE."
//+"But if you manage it good, you can use it for free."
//+"Don't forget to press save in MCE toolbar."
//+ "", "tempfilename", "yourCSS.css"); }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// MessageBox.Show(webBrowser1.Document.DomDocument.ToString());
string s = this.webBrowser1.Document.Body.InnerHtml;
string ss = this.webBrowser1.Document.Body.InnerText;
System.Windows.Forms.HtmlDocument document = this.webBrowser1.Document; //if (document != null && document.All["elm1"] != null && String.IsNullOrEmpty(document.All["elm1"].GetAttribute("value")))
//{
System.Windows.Forms.MessageBox.Show(document.All["elm1"].TagName.ToString());
System.Windows.Forms.MessageBox.Show(document.All["elm1"].OuterHtml);
//System.Windows.Forms.MessageBox.Show(document.All["elm1"].DomElement.ToString());
System.Windows.Forms.MessageBox.Show(document.All["elm1"].InnerText); System.Windows.Forms.MessageBox.Show(webBrowser1.Document.GetElementsByTagName("textarea")[].TagName);
// System.Windows.Forms.MessageBox.Show(document.All["elm1"].GetAttribute("value"));
//} //MessageBox.Show(webBrowser1.DocumentText);// HtmlElement textArea = webBrowser1.Document.All["elm1"]; HtmlElementCollection elements = webBrowser1.Document.GetElementsByTagName("textarea");
foreach (HtmlElement element in elements)
{
if (element.InnerHtml.Contains("Rich text editor"))
{
// do something
}
}
}

Csharp:TinyMCE HTML Editor in .NET WindowsForms的更多相关文章

  1. Vue CLI 3+tinymce 5富文本编辑器整合

    基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...

  2. 在 Vue 项目中引入 tinymce 富文本编辑器

    项目中原本使用的富文本编辑器是 wangEditor,这是一个很轻量.简洁编辑器 但是公司的业务升级,想要一个功能更全面的编辑器,我找了好久,目前常见的编辑器有这些: UEditor:百度前端的开源项 ...

  3. tinymce原装插件源码分析(二)-link

    link 功能描述如下: 单纯放置光标: 1.如果光标放到了<a>上,读取a标签的内容,并弹框显示,确定的时候,更新当前a标签. 2.否则,就创建弹框,确定的时候,按照参数添加a标签. s ...

  4. 富文本编辑器 tinymce 的安装与使用

    百度的富文本编辑器大家都熟悉,那么下面给大家介绍一款富文本编辑器tinymce ,个人感觉比百度的界面好看,调用方便,就不知道各位大神怎么看咯! tinymce中文文档 以下是vue中使用示例,献上最 ...

  5. 15、Vue CLI 3+tinymce 5富文本编辑器整合

    富文本编辑器里大佬们都说tinymce NB! 插件安装 inymce官方提供了一个vue的组件tinymce-vue 如果有注册或购买过服务的话,直接通过组件配置api-key直接使用,懒的注册或者 ...

  6. vue 配置 TinyMCE

    1.index.html 增加cdn 地址 <script src="//cdn.bootcss.com/tinymce/5.0.16/tinymce.min.js"> ...

  7. Vue tinymce富文本编辑器

    tinymce 官方为 vue 项目提供了一个组件 tinymce-vue 一.安装tinymce-vue npm install @tinymce/tinymce-vue -S 二.下载tinymc ...

  8. 富文本编辑器Tinymce的示例和配置

    Demo链接: https://download.csdn.net/download/silverbutter/10557703 有时候需要验证tinyMCE编辑器中的内容是否符合规范(不为空),就需 ...

  9. vue项目引入TinyMCE

    1.安装 npm install @tinymce/tinymce-vue@3.0.1 -S 2.配置 <template> <!-- 富文本 --> <div> ...

随机推荐

  1. json_decode转换数组过程中,结果为null处理办法,百分之百有效

    json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用jso ...

  2. 二、为什么要选用pytest以及 pytest与unittest比较

    为什么要选择pytest,我看中的如下: 写case,不需要像unittest那样,创建测试类,继承unittest.TestCase pytest中的fixture(类似于setUp.tearDow ...

  3. 洛谷 P1503 鬼子进村

    题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里 ...

  4. there is already 'RtController' bean method 项目报错

    今天开发项目时候发现项目报错启动的时候,也没有具体指的是哪一行报错,其实很简单的知道,首先看下报错信息: there is already 'RtController' bean method pub ...

  5. Spring学习笔记(三)—— 使用注解配置spring

    一.使用步骤 1.1 导包 1.2 为主配置文件引入新的命名空间(约束) 在applicationContext.xml中引入context约束 1.3 编写相关的类 public class Use ...

  6. POJ_1733 Parity game 【并查集+离散化】

    一.题面 POJ1733 二.分析 该题与之前做过的带权并查集的唯一区别就是数组开不下.所以需要用离散化的思想,只取那些有用的点来解决该问题. 离散化其实就是把这些所有用到的点收集后,去重,再排一下序 ...

  7. Putty之public key ssh认证入门

    1.工作平台 客户端:Win2kEn Sp3,Putty Beta 0.53 服务器:RedHat72,OpenSSH_3.4p1 2.Putty简介 一个免费小巧的Win32平台下的ssh客户端.它 ...

  8. scrapy模块之分页处理,post请求,cookies处理,请求传参

    一.scrapy分页处理 1.分页处理 如上篇博客,初步使用了scrapy框架了,但是只能爬取一页,或者手动的把要爬取的网址手动添加到start_url中,太麻烦接下来介绍该如何去处理分页,手动发起分 ...

  9. 转 How To Stop A Running Job Using DBMS_JOB

    There is no procedure within the dbms_job package to stop a running job.You will need to determine w ...

  10. ABP Zero集成微信小程序登录

    首先是ABPZero的第三方登录模块,通过调用第三方的登录接口返回用户信息,再交给ABP的登录验证模块去执行对应的登录注册. 涉及的数据库表主要是这两个表,AbpUsers存储了用户信息,AbpUse ...