2010-04-21 23 views
1

J'utilise le contrôle .NET WebBrowser en tant qu'éditeur WYSIWYG html. J'ai utilisé ExecCommand pour faire la fonction de mise en forme jusqu'ici, mais je veux maintenant ajouter un inséreur de table. Le problème est que je peux seulement sembler ajouter la table au document, pas l'insérer à mi-chemin. Voici un code de test de base, si quelqu'un peut aider, je l'apprécierais.Comment insérer une table HTML dans un contrôle WebBrowser C#

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

Répondre

1

Vous devez naviguer dans la structure de HtmlDocument, trouver le nœud à l'endroit où vous souhaitez insérer, puis ajoutez là. Si vous ajoutez au corps, vous ajouterez simplement à la fin du dernier élément, c'est-à-dire la fin.

+0

Toute idée de comment vous faites cela en fonction de la sélection actuelle? –

+0

vous avez besoin d'aide pour trouver le dernier élément dans la plage de contrôle de IHTMLDocument2 :: selection? il a une propriété de longueur. –

+1

Le problème que j'ai est que je n'arrive pas à insérer la table dans la sélection en cours?!?! –

0

C'est un peu en retard - mais j'ai récemment eu cette exigence et est venu avec cela. J'ai essayé de faire en sorte que cela soit le plus minimal possible, pour montrer la méthodologie, et vous permettre de personnaliser cela.

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


    } 
} 
1
[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); 
Questions connexes