考慮以下帶有文本框和webbrowser控件的簡單WinForms窗體。當文本框內容發生變化時,文本推到瀏覽器:(我做這樣的事情在我DownMarker代碼來構建與#1的MarkdownSharp庫降價編輯)爲WinForms WebBrowser控件抑制WaitCursor
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>";
}
}
這工作正常,除非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元素進行更細粒度的更新,但顯然要複雜得多。
這指出我在正確的方向,謝謝!我編輯了我的問題以顯示最終解決方案。 – 2010-11-28 23:13:10