将文本追加到richtextbox的最快方式
本文关键字:方式 richtextbox 文本 追加 | 更新日期: 2023-09-27 18:14:51
我有一个应用程序与RichTextBox控件,其中一个过程几乎一直在添加文本:
RichTextBox1.Text += vbNewLine & "Title: " & AlbumName
RichTextBox1.Text += vbNewLine & "Genre: " & AlbumGenre
RichTextBox1.Text += vbNewLine & "Year : " & AlbumYear
RichTextBox1.Text += vbNewLine & "Url : " & AlbumLink
' The slow thing I think is here:
RichTextBox1.SelectionStart = RichTextBox1.Text.Length
RichTextBox1.ScrollToCaret
问题是当richtextbox有大约超过50行,当有更多的行,它转得更慢,以追加新的文本(明显)。
我需要找到一个更好的方法来加速这个过程,当richtextbox line-count达到1.000(例如)时,至少要失去一个微不足道的速度。
这个问题的原因是因为我想做的事情在正确的方式,我不喜欢我的应用程序是缓慢的,当我的richtextbox有很多行。
请,我需要的信息,想法和/或例子(无论是在c#或VBNET)。谢谢。
这是一个较老的帖子-但我想帮助后代!
我一直有同样的问题-最后找到了一个解决方案…首先,如果你不需要额外的格式,使用文本框代替(从我的研究,它更快,并自动滚动到最后)。
如果你需要格式化单独的文本行,RichTextBox是去的方式,但确保你把.HideSelection
到false
(这是真的默认情况下)。这将导致richtextbox滚动到最后,所以你不需要.ScrollToCaret
下面是我在为富文本框设置了所有属性值后使用的内容:
private void appendOutput(String msg){
richTextBoxOutput.AppendText(msg + "'r'n");
}
private void appendError(String msg, bool clearPrior){
if (clearPrior){
richTextBoxOutput.Clear();
}
richTextBoxOutput.SelectionColor = Color.Red;
richTextBoxOutput.SelectedText = msg + "'r'n";
}
更清楚,设置.HideSelection
为false
,避免.ScrollToCaret
大大提高了我的程序的速度。
使用StringBuilder
并一次分配文本。
除非你重写RichTextBox控件,我不认为你将能够加快这个功能:
' The slow thing I think is here:
RichTextBox1.SelectionStart = RichTextBox1.Text.Length
为了获得更好的速度,请考虑以下选择:
Fast-Colored-TextBox-for-syntax-highlighting
ScintillaNET
Icsharpcode TextEditor
下面是你如何滚动以Fast-Colored-TextBox-for-syntax-highlighting
结尾:
Editor.ScrollLeft();
Editor.Navigate(Editor.Lines.Count - 1);
下面是你如何滚动到Scintella.Net
结束:在文本更改事件期间垂直滚动闪烁文本框免责声明:我没有为这些公司工作。
更新:
StringBuilder sb = new StringBuilder();
sb.AppendLine("Title: ");
sb.Append(AlbumName);
sb.AppendLine("Genre: ");
sb.Append(AlbumGenre);
sb.AppendLine("Year : ");
sb.Append(AlbumYear);
sb.AppendLine("Url : ");
sb.Append(AlbumLink);
RichTextBox1.Text = sb.ToString();
如果第一个建议的选项不适合您,您可以尝试以下选项。它是在c#中,但我相信你可以将其转换为VB。
StringBuilder text = new StringBuilder(RichTextBox1.Text);
text.AppendFormat("{0}Title: {1}", Environment.NewLine, AlbumName);
text.AppendFormat("{0}Genre: {1}", Environment.NewLine, AlbumGenre);
text.AppendFormat("{0}Year: {1}", Environment.NewLine, AlbumYear);
text.AppendFormat("{0}Url: {1}", Environment.NewLine, AlbumLink);
RichTextBox1.Text = text.ToString();
RichTextBox1.SelectionStart = RichTextBox1.Text.Length;
RichTextBox1.ScrollToCaret;
StringBuilder类是为速度而构建的。试一下,看看这是否能加快你的进程。
在添加文本行之前,只需将.Visible
设置为false
。
它将阻止窗体在每次添加一条线时重新绘制。
将.Visible
设置为true
,当添加行完成后