2009-02-16 10 views
6

Dans un contrôle WebBrowser, comment puis-je supprimer des objets HtmlElement? Il n'y a aucune méthode dans la classe HtmlElement pour accomplir ceci. Pour contourner le problème, je peux créer un "faux" HtmlElement (sans l'insérer dans le HtmlDocument), dans lequel j'insère (AppendChild) les objets HtmlElement à supprimer. Cela ressemble à un hack. Y a-t-il une meilleure manière de faire cela?Suppression par programmation des objets HtmlElement à l'aide de C#

P.S. Je veux conserver la HtmlElement en mémoire à utiliser plus tard, ne pas détruire simplement (ce qui est ce que la mise en innerHtml de son parent à une chaîne vide ferait)

Répondre

1

Il existe une méthode appelée IHTMLDOMNode::removeNode qui ressemble à la méthode "officielle" pour ce faire, mais il s'agit d'un code non géré dans mshtml.dll. Je cherche quelque chose de plus approprié pour C#.

2

Vous pouvez supprimer l'élément en définissant son outerhtml sur une chaîne vide.

elem.OuterHtml = ""

J'espère que c'est ce que vous recherchez.

g

+0

Ne pas [toujours] avec Internet Explorer 6. La balise BASE, par exemple, résiste cette méthode. – user38329

3

Ajouter une référence à Microsoft.mshtml (onglet de .Net)

using Microsoft.mshtml; 
.... 
{ 
... 
    // To Remove  
    HTMLDocumentClass htmldoc = wbCtrl.Document.DomDocument as HTMLDocumentClass; 
    IHTMLDOMNode node = htmldoc.getElementById("xBar") as IHTMLDOMNode; 
    node.parentNode.removeChild(node); 
... 
} 
+0

Merci, cela m'a permis de comprendre. Mon code fonctionne avec: HTMLDocument htmlDoc = (HTMLDocument) webBrowser1.Document.DomDocument; IHTMLElement tmpElement = htmlDoc.getElementById ("xBar"); IHTMLDOMNode tmpNode = (IHTMLDOMNode) tmpElement; tmpNode.parentNode.removeChild (tmpNode); – Xantix

+0

Alternativement, vous pouvez utiliser le mot-clé dynamique pour enregistrer la distribution explicite de tout, mais vous n'obtenez pas de vérification de temps de compilation que les méthodes existent. – Xantix

Questions connexes