我正在开发名为" 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。我尝试了很多不同的搜索方法,但却无法解决这个问题。
有人可以指出我正确的方向吗?
答案 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;
}
谢谢。