我在表单中使用webbrowser控件。为了允许用户操作网页,我将控件添加到一个新表单中,用户可以在其中隐藏一些HTML元素。这是我隐藏元素的方式:
IHTMLElement2 dom = item.DomElement as IHTMLElement2;
dom.runtimeStyle.visibility = "hidden";
当用户关闭第二个表单时,我切换隐藏和可见元素并再次将WebBrowser添加到我的主表单。这是切换元素可见性的代码,为此,我隐藏body
隐藏元素:
void SwitchVisibility()
{
IHTMLElement bodyDom = wb.Document.Body.DomElement as IHTMLElement;
bodyDom.style.visibility = "hidden";
foreach (var item in addedElements)
{
IHTMLElement2 dom = item.DomElement as IHTMLElement2;
dom.runtimeStyle.visibility = "visible";
}
}
我在form2_closing
偶数和主表单中的form2.ShowDialog()
之后调用了上面的过程,但这些更改不会反映在控件上,除非我最小化并最大化主窗体。我应该添加,如果我不切换元素的可见性,更改反映!另外,如果我将上面的代码放在按钮的click
事件中,则会显示所需的更改。
我使用了 webbrowser 的Refresh
方法,但它实际上重新加载了文档,然后我使用了主窗体的Refresh
方法,但它也不起作用。我想知道文档及其元素的可见性是如何刷新的。
答案 0 :(得分:1)
正如我测试的那样,我必须在关闭form2之后调用主窗体中的SwitchVisibility
并将webbrowser
添加到主窗体中,如下所示:
FormBrowser browser = new FormBrowser();
browser.Browser = webBrowser1;
browser.ShowDialog();
// Readd the webbrowser1
panel1.Controls.Add(webBrowser1);
webBrowser1.Location = loc;
webBrowser1.Size = size;
webBrowser1.BringToFront();
// if this function is called in `Closing`
// event of form2, the chanes are not reflected.
SwitchVisibility(addedElements);
/// To reassure repainting (however it works without it too)
webBrowser1.Invalidate();