C# 如何在WebBrowser控件C中插入HTML表#

C# 如何在WebBrowser控件C中插入HTML表#,c#,html,.net,browser,html-table,C#,Html,.net,Browser,Html Table,我正在使用.NET WebBrowser控件作为所见即所得html编辑器。到目前为止,我一直在使用ExecCommand来完成格式化功能,但是现在我想添加一个表插入器。问题是,我似乎只能将表附加到文档中,而不能中途插入。下面是一些基本的测试代码,如果有人能提供帮助,我将不胜感激 HtmlElement tableRow = null; HtmlElement headerElem = null; HtmlDocument doc = wbDesi

我正在使用.NET WebBrowser控件作为所见即所得html编辑器。到目前为止,我一直在使用ExecCommand来完成格式化功能,但是现在我想添加一个表插入器。问题是,我似乎只能将表附加到文档中,而不能中途插入。下面是一些基本的测试代码,如果有人能提供帮助,我将不胜感激

        HtmlElement tableRow = null;
        HtmlElement headerElem = null;

        HtmlDocument doc = wbDesign.Document;
        HtmlElement tableElem = doc.CreateElement("TABLE");
        doc.Body.AppendChild(tableElem);

        HtmlElement tableHeader = doc.CreateElement("THEAD");
        tableElem.AppendChild(tableHeader);
        tableRow = doc.CreateElement("TR");
        tableHeader.AppendChild(tableRow);
        headerElem = doc.CreateElement("TH");
        headerElem.InnerText = "Col1";
        tableRow.AppendChild(headerElem);

        headerElem = doc.CreateElement("TH");
        headerElem.InnerText = "Col2";
        tableRow.AppendChild(headerElem);

        HtmlElement tableBody = doc.CreateElement("TBODY");
        tableElem.AppendChild(tableBody);

        tableRow = doc.CreateElement("TR");
        tableBody.AppendChild(tableRow);
        HtmlElement tableCell = doc.CreateElement("TD");
        tableCell.InnerText = "Test";
        tableRow.AppendChild(tableCell);
        tableCell = doc.CreateElement("TD");
        tableCell.InnerText = "Test";
        tableRow.AppendChild(tableCell);

您需要浏览HtmlDocument结构,找到要插入它的节点,然后将其追加到该节点。如果附加到正文,只需添加到最后一个元素的结尾,即结尾。

有点晚了-但我最近有了这个要求,并提出了这个。我已经尝试将其最小化,以展示方法,并允许您定制所需的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.HtmlControls;
using System.Windows.Forms;
using System.IO;
using System.Web.UI;

public class HtmlToWebBrowserControlDoc
{

    // The loaded document MUST have a script similar to this

    //      <script type="text/javascript" >
    //              function appendHtml(o) {
    //              var div = document.createElement("div");
    //              div.innerHTML = o;
    //              document.body.appendChild( div);
    //              }
    //      </script>


    public static void InsertHtmlControl(HtmlControl c, WebBrowser wb)
    {

        // create a HtmlTextWriter;
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        HtmlTextWriter htmlw = new HtmlTextWriter(sw);

        // render the control as html
        c.RenderControl(htmlw);


        //invoke the script passing in the html 
        object[] p = new object[1];
        p[0] = (object)sb.ToString();
        wb.Document.InvokeScript("appendHtml", p);

        htmlw.Close();
        htmlw.Dispose();

        sw.Dispose();


    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Web.UI.HTMLControl;
使用System.Windows.Forms;
使用System.IO;
使用System.Web.UI;
公共类HtmlToWebBrowserControlDoc
{
//加载的文档必须具有与此类似的脚本
//      
//函数appendHtml(o){
//var div=document.createElement(“div”);
//div.innerHTML=o;
//文件.正文.附件(div);
//              }
//      
公共静态无效InsertHtmlControl(HTMLControlC,WebBrowser wb)
{
//创建一个HtmlTextWriter;
StringBuilder sb=新的StringBuilder();
StringWriter sw=新的StringWriter(sb);
HtmlTextWriter htmlw=新的HtmlTextWriter(sw);
//将控件呈现为html
c、 渲染控制(htmlw);
//调用传入html的脚本
object[]p=新对象[1];
p[0]=(对象)sb.ToString();
wb.Document.InvokeScript(“appendHtml”,p);
htmlw.Close();
htmlw.Dispose();
sw.Dispose();
}
}
[DllImport(“user32.dll”)]
公共静态外部bool GetCaretPos(参考点pt);
.....
HtmleElement newElement=webBrowser.Document.CreateElement(“”);
点p=新点();
GetCaretPos(参考p);
HtmlElement currentElement=webBrowser.Document.GetElementFromPoint(p);
currentElement.InsertAdjaceElement(htmlElementInSerctionOrientation.AfterBegin,newElement);

知道如何根据当前选择执行此操作吗?需要帮助查找IHTMLDocument2::selection控制范围内的最后一个元素吗?它有一个长度属性。我的问题是我似乎无法将表插入当前选择?!?!
[DllImport("user32.dll")]
public static extern bool GetCaretPos(ref Point pt);

.....

 HtmlElement newElement = webBrowser.Document.CreateElement("<div></div>");
 Point p = new Point();
 GetCaretPos(ref p);
 HtmlElement currentElement = webBrowser.Document.GetElementFromPoint(p);
 currentElement.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, newElement);