zoukankan      html  css  js  c++  java
  • Syncfusion HTMLUI研究一

    HTMLUI可以加载HTML页面,并且相比WebKit等占用资源特别少

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body marginheight="0" marginwidth="0" bgcolor="#ffffff">
    <div>
        <span style="font:Bold">12121</span>
        <span style="font:Bold;Color:Blue">121212</span>
        <span style="font:Bold;Color:Blue">121212</span>
    </div>
    <hr></hr>
    <div>
        <span style="font:Bold;font-size:9pt">1212</span>
        <span style="font:Bold;font-size:9pt">1221</span>
        <span style="font:Bold;font-size:9pt">1212</span>
    </div>
    <p>
        <span style="font:Bold;font-size:9pt">12121</span>
        
        <span id="aaa" style="24px;height:24px;"></span>
        
        <span style="font:Bold;font-size:9pt">121212</span>
    </p>
    </div>
    </body>
    </html>




    (1)HTMLUI源码中绘制部分

    /// <summary>
    /// Starts the drawing of the document from the start element.
    /// </summary>
    /// <param name="e">Paint event data.</param>
    private void ProcessDraw(PaintEventArgs e)
    {
        if (e == null)
            throw new ArgumentNullException("e");
    
        if (m_startDrawElement == null)
        {
            this.RenderRoot.DrawElement(e);
        }
        else
        {
            m_startDrawElement.DrawElement(e);
    
            // Reset start element.
            m_startDrawElement = null;
        }
    }

    如果m_startDrawElement为null,在根html tag下绘制,否则在指定元素下绘制。
    (2)FlowLayoutPanel中使用HTMLUI时,要先用一个UserControl或者其它控件作为HTMLUI的父控件,不然滚动时会出现花屏现象。

    (3)动态改变HTMLUI元素内容代码

    private void htmluiControl1_PreRenderDocument(object sender, Syncfusion.Windows.Forms.HTMLUI.PreRenderDocumentArgs e)
            {
                Hashtable htmlelements = new Hashtable();
                htmlelements = e.Document.ElementsByUserID;
                Label lable=new Label();
                lable.Text = "1";
                lable.Width = 24;
                lable.Height = 24;
                lable.BackColor = Color.Red;
                BaseElement aaa = htmlelements["aaa"] as BaseElement;
                    new CustomControlBase(aaa, lable);
    
            }
    
            private void ChangeLableValue(HTMLUIControl htmluiControl,string str)
            {
    
                var v = htmluiControl.Document.GetElementsByUserIdHash()["aaa"];
                Label v1= htmluiControl.Document.GetControlByElement((IHTMLElement) v) as Label;
                v1.Text = str;
            }

    (4)有时创建会报线程间操作无效: 从不是创建控件“”的线程访问它,经检查原因在PreRenderDocument,修改PreRenderDocument如下。

    private void htmluiControl1_PreRenderDocument(object sender, Syncfusion.Windows.Forms.HTMLUI.PreRenderDocumentArgs e)
            {
                Hashtable htmlelements = new Hashtable();
                htmlelements = e.Document.ElementsByUserID;
    
                Action<Hashtable> action = (data) =>
                {
                    Label lable = new Label();
                    lable.Text = "1";
                    lable.Width = 24;
                    lable.Height = 24;
                    lable.BackColor = Color.Red;
                    BaseElement aaa = htmlelements["aaa"] as BaseElement;
                    new CustomControlBase(aaa, lable);
                };
                Invoke(action, htmlelements);
    
            }

     一起研究的来群:616945527

  • 相关阅读:
    MySQL5.7.19 服务挂掉 自动关闭 mysqld got exception 0xc000001d win 2008R2
    intellij IDEA VS(Visual Studio) 常用 高效 黄金 快捷键
    .Net MVC Cache 缓存技术总结
    HttpContext.Current.Cache 过期时间
    Sql Server 数据类型与 C# 数据类型对照
    Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope
    Hibernate注解映射联合主键的三种主要方式
    hibernate 查询全部数据的三种方法
    Springframework和Hibernate版本对应关系
    C# 反射总结 获取 命名空间 类名 方法名
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/8491521.html
Copyright © 2011-2022 走看看