【问题标题】:Suppress WaitCursor for WinForms WebBrowser control禁止 WinForms WebBrowser 控件的 WaitCursor
【发布时间】:2010-11-28 22:04:27
【问题描述】:

考虑以下带有文本框和网络浏览器控件的简单 WinForms 表单。每当文本框内容发生变化时,文本就会被推送到浏览器:

public class MainForm : Form
{
    public MainForm()
    {
        var browser = new WebBrowser() { Dock = DockStyle.Fill };
        var textbox = new TextBox() { Dock = DockStyle.Fill, Multiline = true };
        var splitter = new SplitContainer() { Dock = DockStyle.Fill };

        splitter.Panel1.Controls.Add(textbox);
        splitter.Panel2.Controls.Add(browser);
        this.Controls.Add(splitter);

        textbox.TextChanged += delegate { browser.DocumentText = textbox.Text; };
        textbox.Text = "<b>hello world</b>";
    }
}

(我在我的 DownMarker 代码中执行类似的操作,以使用 Stackoverflow 的 MarkdownSharp 库构建 Markdown 编辑器。)

这很好用,除了WebBrowser 控件坚持在设置DocumentText 时显示等待光标——即使更新浏览器内容只需要几毫秒。这会导致在文本框中键入时鼠标光标闪烁。

有没有办法抑制这些鼠标光标的变化?我已经考虑过限制DocumentText 更新的速率,但我发现更新期间偶尔的闪烁仍然很烦人,我更喜欢即时更新。


编辑: Hans 的回答为我指明了正确的方向。将 TextChanged 事件处理程序更改为此似乎可以在没有光标闪烁的情况下工作:
textbox.TextChanged += 
    delegate 
    {
        if (browser.Document == null)
        {
            browser.DocumentText = "<html><body></body></html>";
        }
        while ((browser.Document == null) 
            || (browser.Document.Body == null))
        {
            Application.DoEvents();
        }
        browser.Document.Body.InnerHtml = textbox.Text;
    };

edit2:当页面变重时,上面仍然显示等待光标,例如通过添加图像。仅对发生变化的 html 元素进行更细粒度的更新,这可能是可以解决的,但这显然要复杂得多。

【问题讨论】:

    标签: c# winforms webbrowser-control


    【解决方案1】:

    分配 DocumentText 属性是一件大事,WebBrowser 将其视为导航命令。它无法区分。这通常需要数百毫秒的时间,足以证明显示等待光标的合理性。

    一种非常不同的方法是加载一个虚拟文档并通过 Document 属性更改 DOM。这在网页、Ajax 和 javascript 等中很常见。那些没有等待光标。不太确定这是否仍然适合您的编辑模型,我猜您想加载一个带有空 &lt;body&gt; 的虚拟 HTML 文档并更改正文内容。

    应该可以。备份计划是更新!按钮。这也将避免尝试呈现半成品并因此损坏 HTML。

    【讨论】:

    • 这为我指明了正确的方向,谢谢!我已经编辑了我的问题以显示最终解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2017-11-07
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多