gpt4 book ai didi

c# - 抑制 WinForms WebBrowser 控件的 WaitCursor

转载 作者:行者123 更新时间:2023-11-30 15:09:33 24 4
gpt4 key购买 nike

考虑以下带有文本框和网络浏览器控件的简单 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 更新进行速率限制,但我发现更新期间偶尔出现的闪烁仍然很烦人,我更喜欢即时更新。


编辑:汉斯的回答为我指明了正确的方向。将 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 元素进行更细粒度的更新,但这显然要复杂得多。

最佳答案

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

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

应该可以。备份计划是一个更新!按钮。这也可以避免尝试呈现半成品和损坏的 HTML。

关于c# - 抑制 WinForms WebBrowser 控件的 WaitCursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com