【发布时间】:2015-12-19 16:24:02
【问题描述】:
我在表单中使用 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 方法,但它也不起作用。我想知道文档及其元素的可见性是如何刷新的。
【问题讨论】:
-
如果确定需要重绘控件,可以试试
webBrowser1.Invalidate(); -
@RezaAghaei 当我最小化和最大化主窗体时,我看到了所需的内容。但是,在
form2.ShowDialog()之后使用invalidate()也不起作用。 -
所以也许最好分享一个简单的代码来重现问题。因为现在我们只能猜测。
-
@RezaAghaei 我尝试过,但我只是想知道当我最小化和最大化表单时 WebBrowser Document 会发生什么,除了重绘和无效。
-
我测试了这样的场景,它工作正常。在没有看到整个复制代码的情况下,我不知道可能导致问题的原因。
标签: c# winforms controls webbrowser-control