考虑以下带有文本框和WebBrowser控件的简单WinForms表单。每当文本框内容更改时,文本将被推送到浏览器:
编辑: Hans的答案指引我正确的方向。将TextChanged事件处理程序更改为以下内容似乎可以在没有光标闪烁的情况下工作:
编辑2:当页面变得更重,例如添加图片时,上述仍然显示等待光标。这可能可以通过对仅更改的html元素进行更细粒度的更新来修复,但这显然要复杂得多。
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代码构建一个Markdown编辑器,并使用Stackoverflow的MarkdownSharp库,类似于以下操作。
这个工作得很好,除了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;
};
编辑2:当页面变得更重,例如添加图片时,上述仍然显示等待光标。这可能可以通过对仅更改的html元素进行更细粒度的更新来修复,但这显然要复杂得多。