- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下带有文本框和网络浏览器控件的简单 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
更新进行速率限制,但我发现更新期间偶尔出现的闪烁仍然很烦人,我更喜欢即时更新。
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/
我有一个需要几秒钟才能最终显示的表单。此表单通过以下方式调用: using (ResultsForm frm = new ResultsForm()) { this.Visible = fal
我有一个表单,它在 BackgroundWorker 工作时显示加载动画,并在工作完成时关闭。我用以下代码展示它: using (BackgroundWorker bw = new Backgroun
我在按钮点击中得到了代码,如下所示: try { Cursor = Cursors.WaitCursor; GenerateReports(); } finally { Cur
在 Visual Studio 2010 Express (C#) 中工作: 一旦我在下拉菜单中将光标切换到“WaitCursor”,我就无法将其更改为其他任何内容。这对我来说似乎是一个错误。其他人可
我试过以下方法 this.Cursor = Cursors.WaitCursor; //OR this.UseWaitCursor = true; //OR Application.UseWaitCu
考虑以下带有文本框和网络浏览器控件的简单 WinForms 表单。每当文本框内容发生变化时,文本就会被推送到浏览器: public class MainForm : Form { public
QMessageBox::information(this, "hello", "hello"); QApplication::setOverrideCursor(Qt::WaitCursor); Q
我在 C# .NET CF 应用程序中运行了一个有点冗长的过程,然后我想显示沙漏鼠标指针。我使用的代码是: Cursor.Current = Cursors.WaitCursor; Cursor.Sh
我是一名优秀的程序员,十分优秀!