所以我花了大約三天的時間搜索互聯網 - 谷歌,堆棧溢出,微軟的C#文檔 - 並沒有產生有益的結果。我的問題是我最近創建了一個非常靈活和快速的語法突出顯示RichTextBox,它保存在UserControl中。我使用WinForms創建了這個。如何使用RichTextBox突出顯示語法並禁用自動滾動?
然而,儘管我的項目的速度和靈活性,仍然存在一個明顯的和極其令人討厭的故障。這個小故障是我的RichTextBox會自動滾動...所有... The ...時間。我不希望這種自動滾動發生。當我突出顯示文字時,我希望用戶看不到任何移動或過渡,但只能看到彩色字母和符號。這是影響了我的項目的語法高亮代碼:
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
private void DoHighlight()
{
if (TextEditor.Text.Length <= 0)
return;
int visibleStart = TextEditor.GetCharIndexFromPosition(new Point(1, 1));
int visibleEnd = TextEditor.GetCharIndexFromPosition(new Point(1, TextEditor.Height - 1)) + TextEditor.Lines[BottomLine].Length;
int[] curSelection = new [] {TextEditor.SelectionStart,TextEditor.SelectionLength};
LineCounter.Focus();
SendMessage(TextEditor.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
TextEditor.SelectAll();
TextEditor.SelectionColor = TextEditor.ForeColor;
if (parser != null)
parser.HighlightText(this, visibleStart, visibleEnd);
TextEditor.SelectionStart = curSelection[0];
TextEditor.SelectionLength = curSelection[1];
SendMessage(TextEditor.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
TextEditor.Invalidate();
TextEditor.Focus();
}
做一些調試和使用許多斷點之後,我確定DoHighlight後自動滾動不會發生,直到()方法已完成,順其自然。
另外,我認爲可能很重要的一點是,只要RichTextBox的文本現在發生更改,就會調用此DoHighlight()方法。
「可能發生自動滾動」 但是...我不希望發生自動滾動。那是你的意思嗎?並感謝您的幫助!非常感謝! – NoahWillCrow