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