如何强制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 事件中,则会显示所需的更改。

我使用了 webbrowserRefresh 方法,但它实际上重新加载了文档,然后我使用了主窗体的 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();