HTMLDocument без HTML Agility Pack - PullRequest
0 голосов
/ 13 мая 2018

Я работаю над сторонней программой под названием "Encompass 360", и я очень ограничен пределами их SDK.С учетом сказанного они используют MSHTML для составления форм (поэтому я не могу использовать HAP). Это был очень неприятный процесс.

Я хочу создать свою собственную форму, которая более динамична, чемчто они предлагают от своего "строителя форм".

Определение, которое они дают нам для его использования:

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

С кодом выше, "htpanel.write () »вызывает исключение COMException с ошибкой« Несоответствие типов ».Я перепробовал много разных способов поиска и не смог пройти через это.

Может кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 14 мая 2018

Сообщение Райана, связанное ( .net, запись документа с помощью mshtml ), направило меня в правильном направлении.Для всех, кто может пойти по этому пути: я передал элемент управления в виде mshtml htmldocument другому методу, который позволил использовать «IHTMLDocument2» и его метод .write, который фактически работает.

Код приведен ниже:

Первый метод, который назначает один из элементов управления Encompass в качестве истинного 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;
       }

Спасибо.

...