【问题标题】:Calculate Size of WebBrowser document before being displayed on screen在显示在屏幕上之前计算 WebBrowser 文档的大小
【发布时间】:2020-11-30 11:18:43
【问题描述】:

我正在尝试在 Windows 窗体中的 WebBrowser 控件中显示一些 html,并希望根据 html 内容调整窗体的大小。

我可以通过查看DocumentCompleted 事件中的webBrowser1.Document.Body.ScrollRectangle.Size 来做到这一点。但是,在显示表单之前不会触发该事件。因此我需要显示表单,然后重新调整大小。

有什么方法可以避免这种闪烁并将表单初始化为正确的大小?

【问题讨论】:

  • 在打开此表单的代码中,只需创建实例,例如var f = new FormBrowser();(假设这是您的表单的类名)。在FormBrowser 构造函数中,调用[WebBrowser].Navigate("[https://Some address]");。在DocumentCompleted 中,在var browser = sender as WebBrowser; if (browser.ReadyState != WebBrowserReadyState.Complete) return; 之后,测量文档并调用this.Show();
  • 您在此处找到的代码:WebBrowser Html Document to Image 可以帮助调整 HTML 文档的大小,以备不时之需。
  • @Jimi 首先,我没有导航到网站,只是试图将 DocumentText 设置为现有的 html 字符串。其次,您指向的链接答案是使用 DocumentCompleted 事件,该事件在我的表单显示之前不会触发。
  • 导航到 HTTP 地址或手动设置文档内容(我假设您使用 HtmlDocument.Write())是同样的事情。 DocumentCompleted 事件与是否显示表单无关:该事件在其他地方引发,并且无论表单的状态如何,一旦初始化表单,就会调用其委托(在InitializeComponent() 完成之后)或该事件已被订阅。
  • 我只是在设置 webBrowser1.DocumentText 。此外,如果我省略了 f.ShowDialog(); 命令,则永远不会调用 DocumentCompleted。

标签: c# winforms webbrowser-control


【解决方案1】:

解决方案/解决方法似乎相当简单。

设置html后使用

webBrowser1.DocumentText = html;

在显示表单之前,只需调用

System.Windows.Forms.Application.DoEvents();

这意味着DocumentCompleted 将在表单显示之前被触发。

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多