Winform 下使用WebBrowser的HTML编辑控件—WinHtmlControl 在win7 IE9下的问题

问题是这样的,有一个需要用到富文本的地方,由于是winform的程序,而且程序是上一代老员工留下的,错误百出,现在要尽量修复,至少保证能正常使用,于是就开始一点点问题修复.

在win7 64位系统下出现无法激活编辑状态,或者说无法获得光标,总之无法写入任何字符就是了. 

开始怀疑是32位和64位的原因,  编译了一个64位的版本测试,结果还是不行.

找到了@liust 仁兄的一篇文章,豁然开朗,原来是ie9在捣鬼,还不是64位的原因,  由于win7 64位只能安装ie9 所以问题还是得解决.

直接复制下面的代码,似乎是有些用,但是产生了其他问题

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 

if (webBrowser1.Version.Major >= 9) 

webBrowser1.Document.Write(webBrowser1.DocumentText); 

doc.designMode = "On"; 

}

  

当然博主忘了说 要注册事件的.

要在private void SetupBrowser() 里

注册事件
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
 

由于我的系统是上一代老员工留下的,所以在DocumentCompleted 事件里有一些其他的代码.

导致出现了一个新的问题. "该文档已被修改,是否保存修改结果?"

 

出现了这个问题,再继续搜索,走了一些弯路

webBrowser1.Document.Write(webBrowser1.DocumentText); 应该是这句惹得祸

但是如何又能加载数据,又可以避免在这个地方修改控件的值呢,  我的想法应该是在设置On之前就把数据加载好

 

在调试中发现次触发焦点事件时首先会走到这个函数

private void SetupBrowser(bool edit)

在这个函数里有一个标志 edit   

如果为真 则设置了 doc.designMode = "On" 

之后又做了一些其他的操作,没有细看

为什么明明设置了"On"了 到了DocumentCompleted 又要再设置一次呢? 

与其在那猜测,还不如调试呢,于是装上IE9, 开始调试

发现程序在IE9下跑到DocumentCompleted 时   ie9下的designMode为"Inherit"

难怪又要再设置一次"On" 于是根据SetupBrowser(bool edit) 这个里面的edit  在DocumentCompleted 中修改了一下代码

其中toolStrip.Visible 是控件的工具条是否显示,由于是个全局变量,所以就直接拿来用了,因为toolStrip.Visible = edit ; 否则楼主是想自己建个全局变量来保存edit的状态的

if (toolStrip.Visible)
{
    if (doc.designMode != null && doc.designMode != "On")
        doc.designMode = "On";

}

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

Winform 下使用WebBrowser的HTML编辑控件—WinHtmlControl 在win7 IE9下的问题的相关文章

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

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

c++-MFC Tab控件下的page与page的控件冲突

问题描述 MFC Tab控件下的page与page的控件冲突 我在MFC下做了4个对话框,其中一个是主对话框,内有一个Tab控件,然后剩下的三个对话框作为子对话框,也就是tab控件的三个page. 我在第一个page(子对话框)中添加了一些控件,如listctrl控件,同时关联了变量. 程序运行没有问题. 接着我在其他两个page(子对话框)中添加了相同的控件,同时关联了变量,接下来就是令我不解的地方,程序崩溃了.我什么都没做,只是关联了一下控件变量,不知道为什么程序会崩溃. 在线等,求大神指导

Winform开发框架之HTML编辑控件

我们知道,在做Web开发的时候,很多控件可以用来做HTML内容编辑的,Winform开发就相对少很多,不过很多时候,我们在做Winform开发的时候,也是需要处理这样的场景的.例如发送HTML邮件内容的时候,在给客户编写内容丰富的反馈意见或者邮件的时候等等,因此有必要做一个支持好HTML格式,支持图片插入等丰富内容的控件. 本文就是介绍这么一个控件,这个控件增加了一些常见HTML格式的工具栏操作,并且改良支持Win7系统下的内容编辑(一般WebBrowser包装类,在Win7下内容会变得不可编辑

C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

  这篇文章主要介绍了C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下 特别是针对循环或timer处理中需要在窗体控件显示数据时,因后台处理过度繁忙而出现没刷新或者假死现象时,可以使用 代码如下: Application.DoEvents(); Application.DoEvents()的作用 代码如下: private void

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

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

WinForm中类似WebForm中的CheckBoxList控件

web|控件 前些天,在.Net技术的论坛里面看到了有个帖子,我好像记得是怎么实现WinForm中类似WebForm中的CheckBoxList控件,我简单的实现了那样的一个控件 首先,你得建立一个控件项目,假如说是: 接着,你就添加一个类:CheckBoxCollection,它是个CheckBox的集合类 具体的代码如下 CheckBoxCollection.cs using System;using System.Collections;using System.Windows.Forms

如何在ASP.NET下遍历指定页面上所有控件

asp.net|遍历|控件|页面 如何在ASP.NET下遍历指定页面上所有控件 序:把它写下的目的,是感觉这段代码会对一些朋友有所帮助! #region 清空指定页面上所有的控件内容,public static void ClearAllContent()/// <summary>/// 清空指定页面上所有的控件内容,包括TextBox,CheckBox,CheckBoxList,RadioButton,RadioButtonList.但是不清/// 除如ListBox,DropDownLis

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

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

在什么情况下会用到第三方的控件,为什么不自己开发呢?

问题描述 在什么情况下会用到第三方的控件,为什么不自己开发呢? 一般在什么情况下会选择去用第三方的控件,为什么程序员不自己去写呢? 解决方案 我在VB6.0想用Win7风格的按钮,我写了600多行(不是load image)然后各种事件像Mouse_Move,Mouse_Drag,还有Click--最后写完脑子都大了所以一般情况下有第三方de大部分情况都选第三方 解决方案二: 我在VB6.0想用Win7风格的按钮,我写了600多行(不是load image)然后各种事件像Mouse_Move,M