没有HTML Agility Pack的HTMLDocument

时间:2018-05-13 19:32:35

标签: c# mshtml

我正在开发名为" Encompass 360"的第三方程序。而且我非常局限于他们的SDK的限制。话虽如此,他们利用MSHTML来绘制表格(因此我无法利用HAP。)这是一个非常令人沮丧的过程。

我想创建一个比他们的#34;表单构建器"更具动态性的表单。

他们为我们提供的定义:

public void AttachToDocument(HTMLDocument document, FormOptions option)

我正在尝试这个:

        HTMLDocument htpanel = pnlHTML.HTMLElement.document as HTMLDocument;
        htpanel.open();
        htpanel.createElement("Form");
        htpanel.createTextNode("Just some text");
        htpanel.createAttribute("P");
        htpanel.write(new object[] { "<P>Please work.</P>" });
        htpanel.close();
        htpanel.body.innerHTML = ("<SCRIPT type=\"text/javascript\">Alert(\"HI\");</SCRIPT>");
        try
        {
            htpanel.body.outerHTML = ("<BODY id=pnlHTML1 contentEditable=false style=\"BORDER-TOP: 0px inset; BORDER-RIGHT: 0px inset; BORDER-BOTTOM: 0px inset; BORDER-LEFT: 0px inset; VISIBILITY: inherit\" controlType=\"Class1\"></BODY>");
        }catch(Exception ex)
        {
            wf.MessageBox.Show(ex.Message.ToString());
        }
        htpanel.bgColor = Color.Black;
        this.Form.AttachToDocument(htpanel, FormOptions.None);

使用上面的代码,&#34; htpanel.write()&#34;导致错误为&#34;类型不匹配&#34;的COMException。我尝试了很多不同的搜索方法,但却无法解决这个问题。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

Ryan关联的帖子(.net document write with mshtml)让我朝着正确的方向前进。对于可能沿着这条路走下去的其他人:我将控件作为mshtml htmldocument传递给另一个允许使用&#34; IHTMLDocument2&#34;和它的.write方法实际上有效。

代码如下:

第一种分配Encompass&#39;控件作为真正的HTMLDocument,

        HTMLDocument htpanel = pnlHTML.HTMLElement.document as HTMLDocument;
        var add2form = doc(htpanel);
        this.Form.AttachToDocument(add2form, FormOptions.None);

第二种方法是转换并将控制权转回。

       public HTMLDocument doc(HTMLDocument panel)
       {
        IHTMLDocument2 doc2 = (IHTMLDocument2)panel;
        doc2.bgColor = Color.Black;
        doc2.title = "my_title";
        doc2.write(new object[] { "<p>a</p>" });
        doc2.close();
        return (HTMLDocument)doc2;
       }

谢谢。