Как вставить таблицу HTML в элемент управления WebBrowser C # - PullRequest
1 голос
/ 21 апреля 2010

Я использую элемент управления .NET WebBrowser, чтобы использовать его в качестве редактора WYSIWYG 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);

Ответы [ 3 ]

1 голос
/ 26 декабря 2013
[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);
1 голос
/ 21 апреля 2010

Вам нужно перейти по структуре HtmlDocument, найти узел, в который вы хотите его вставить, и затем добавить туда.Если вы добавляете в тело, вы просто добавляете в конец последний элемент, то есть конец.

0 голосов
/ 14 марта 2011

Уже немного поздно - но у меня недавно было это требование, и я придумал это. Я попытался сделать это как можно более минимальным, показать методологию и позволить вам настроить это как обязательное.

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();


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...