如何强制WebBrowser Control重新绘制和重绘网页元素
How to force WebBrowser Control to repaint and redraw the webpage elements
我在表单中使用网络浏览器控件。为了允许用户操作网页,我将控件添加到一个新窗体,用户可以在其中隐藏一些 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
方法,但它也没有工作。我想知道如何刷新文档及其元素的可见性。
根据我的测试,我必须在关闭 form2 并将 webbrowser
添加到主窗体后调用主窗体中的 SwitchVisibility
,如下所示:
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();
我在表单中使用网络浏览器控件。为了允许用户操作网页,我将控件添加到一个新窗体,用户可以在其中隐藏一些 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
方法,但它也没有工作。我想知道如何刷新文档及其元素的可见性。
根据我的测试,我必须在关闭 form2 并将 webbrowser
添加到主窗体后调用主窗体中的 SwitchVisibility
,如下所示:
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();