Самы хуткі спосаб дадаць тэкст у RichTextBox?

У мяне ёсць дадатак з кантролем 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 лініі лічыльнік дасягае 1.000 (да прыкладу).

Прычына гэтага пытання, таму што я хачу рабіць рэчы ў правільным кірунку, мне не падабаецца маё дадатак, каб быць павольным, калі мой RichTextBox мае шмат ліній.

Калі ласка, мне патрэбна інфармацыя, ідэі і/або прыклады (незалежна ад таго, калі ў C# або VBNET). Дзякуй.

3
Калі вы хочаце толькі дадаць тэкст у канец, разгледзець пытанне аб выкарыстанні RichTextBox.AppendText.
дададзена аўтар Harald Coppoolse, крыніца
Калі вы хочаце толькі дадаць тэкст у канец, разгледзець пытанне аб выкарыстанні RichTextBox.AppendText.
дададзена аўтар Harald Coppoolse, крыніца
Проста маленькі савет з кодавымі каментарамі VB.Net. У мяне асабіста ёсць апостраф ў канцы каментара. Гэта не мае вялікага значэння ў кодзе (акрамя выглядае трохі чысцей), але ён прадухіляе тэкставыя палі на вэб-старонках ад думкі, што гэта проста радок (што ваш адказ зрабіў). Гэта крыху nitpicky, але ён выглядае нашмат лепш, і ваш код будзе правільна афарбаваным.
дададзена аўтар James Yeoman, крыніца
Проста маленькі савет з кодавымі каментарамі VB.Net. У мяне асабіста ёсць апостраф ў канцы каментара. Гэта не мае вялікага значэння ў кодзе (акрамя выглядае трохі чысцей), але ён прадухіляе тэкставыя палі на вэб-старонках ад думкі, што гэта проста радок (што ваш адказ зрабіў). Гэта крыху nitpicky, але ён выглядае нашмат лепш, і ваш код будзе правільна афарбаваным.
дададзена аўтар James Yeoman, крыніца

8 адказы

Гэта стары пост - але я хацеў, каб дапамагчы будучым пакаленням!

У мяне паўсталі і тое ж пытанне - і, нарэшце, знайшлі рашэнне ... Па-першае, калі вам не трэба дадатковае фарматаванне выкарыстоўваць TextBox замест (з маіх даследаванняў, гэта хутчэй і аўтатрансфарматары пракручваецца да канца).

If you need the formatting of individual lines of text, RichTextBox is the way to go, but MAKE SURE you turn .HideSelection to false (it's true by default). This will cause the richtextbox to scroll to the end, so you do not need .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";
}

<�Моцны> UPDATE

Каб быць больш ясным, ўстаноўка .HideSelection у ілжывым і пазбегнуць .ScrollToCaret значна палепшаная хуткасць маёй праграмы.

9
дададзена

Гэта стары пост - але я хацеў, каб дапамагчы будучым пакаленням!

У мяне паўсталі і тое ж пытанне - і, нарэшце, знайшлі рашэнне ... Па-першае, калі вам не трэба дадатковае фарматаванне выкарыстоўваць TextBox замест (з маіх даследаванняў, гэта хутчэй і аўтатрансфарматары пракручваецца да канца).

If you need the formatting of individual lines of text, RichTextBox is the way to go, but MAKE SURE you turn .HideSelection to false (it's true by default). This will cause the richtextbox to scroll to the end, so you do not need .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";
}

<�Моцны> UPDATE

Каб быць больш ясным, ўстаноўка .HideSelection у ілжывым і пазбегнуць .ScrollToCaret значна палепшаная хуткасць маёй праграмы.

9
дададзена

Выкарыстоўвайце StringBuilder і прысвоіць тэкст на адным дыханні.

Калі вы не перапішам кантроль RichTextBox Я не думаю, што вы будзеце ў стане паскорыць гэтую функцыю:

' The slow thing I think is here:
RichTextBox1.SelectionStart = RichTextBox1.Text.Length 

Для лепшай хуткасці разгледзець гэтыя варыянты:

Фаст-Colored-TextBox-для-падсвятленне сінтаксісу </а>ScintillaNET

Icsharpcode TextEditor


Вось як вы робіце скролінг да канца з кодам <> Фаст-Colored-TextBox-для-падсвятленне сінтаксісу :

 Editor.ScrollLeft();
 Editor.Navigate(Editor.Lines.Count - 1);

Here is how you do the scrolling to end with Scintella.Net: Vertical scroll Scintilla Textbox during Text Changed event Disclaimer: I dont work for any of these companies.

<�Моцны> Update:

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();
5
дададзена
Няма хітрасць заключаецца ў тым, каб зрабіць усё канкатэнацыі з дапамогай StringBuilder. Прызначэнне яго, як толькі гэта ключ, таму што тэкст ўласнасць RichTextBox з'яўляецца радком і радкі з'яўляюцца нязменнымі.
дададзена аўтар Jeremy Thompson, крыніца
@ElektroHacker бачыць маё абнаўленне :)
дададзена аўтар Jeremy Thompson, крыніца
Дзякуй, я па-за часам цяпер я паспрабую ўсё адказы пазней і «хуткая каляровыя» і прыняць адказ, яшчэ раз дзякуй.
дададзена аўтар ElektroStudios, крыніца
Ці можаце вы дадаць у сваім адказе прыклад StringBuilder прымаючы спасылачныя маёй прыклад радкі коды? Як гэта будзе выкарыстоўваць StringBuilder? Я адразу замяніць тэкст RichTextBox з тэкстам StringBuilder або ... як?
дададзена аўтар ElektroStudios, крыніца
Чаму вы не выкарыстоўваеце sb.AppendLine (...) замест sb.append (Environment.NewLine + ...) ?
дададзена аўтар Chad, крыніца
У выпадку, калі гэта не RichTextBox1.Text = sb.ToString (); быць як RichTextBox1.Text + = sb.ToString (); ? Вы скід RichTextBox »тэксту кожны раз, не?
дададзена аўтар Everyone, крыніца
StringBuilder быў вельмі хутка, пры даданні вялікіх кавалкаў «радок-дадзеных» у RichTextBox
дададзена аўтар Half_Baked, крыніца

Выкарыстоўвайце StringBuilder і прысвоіць тэкст на адным дыханні.

Калі вы не перапішам кантроль RichTextBox Я не думаю, што вы будзеце ў стане паскорыць гэтую функцыю:

' The slow thing I think is here:
RichTextBox1.SelectionStart = RichTextBox1.Text.Length 

Для лепшай хуткасці разгледзець гэтыя варыянты:

Фаст-Colored-TextBox-для-падсвятленне сінтаксісу </а>ScintillaNET

Icsharpcode TextEditor


Вось як вы робіце скролінг да канца з кодам <> Фаст-Colored-TextBox-для-падсвятленне сінтаксісу :

 Editor.ScrollLeft();
 Editor.Navigate(Editor.Lines.Count - 1);

Here is how you do the scrolling to end with Scintella.Net: Vertical scroll Scintilla Textbox during Text Changed event Disclaimer: I dont work for any of these companies.

<�Моцны> Update:

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();
5
дададзена
Няма хітрасць заключаецца ў тым, каб зрабіць усё канкатэнацыі з дапамогай StringBuilder. Прызначэнне яго, як толькі гэта ключ, таму што тэкст ўласнасць RichTextBox з'яўляецца радком і радкі з'яўляюцца нязменнымі.
дададзена аўтар Jeremy Thompson, крыніца
@ElektroHacker бачыць маё абнаўленне :)
дададзена аўтар Jeremy Thompson, крыніца
Дзякуй, я па-за часам цяпер я паспрабую ўсё адказы пазней і «хуткая каляровыя» і прыняць адказ, яшчэ раз дзякуй.
дададзена аўтар ElektroStudios, крыніца
Ці можаце вы дадаць у сваім адказе прыклад StringBuilder прымаючы спасылачныя маёй прыклад радкі коды? Як гэта будзе выкарыстоўваць StringBuilder? Я адразу замяніць тэкст RichTextBox з тэкстам StringBuilder або ... як?
дададзена аўтар ElektroStudios, крыніца
Чаму вы не выкарыстоўваеце sb.AppendLine (...) замест sb.append (Environment.NewLine + ...) ?
дададзена аўтар Chad, крыніца
У выпадку, калі гэта не RichTextBox1.Text = sb.ToString (); быць як RichTextBox1.Text + = sb.ToString (); ? Вы скід RichTextBox »тэксту кожны раз, не?
дададзена аўтар Everyone, крыніца
StringBuilder быў вельмі хутка, пры даданні вялікіх кавалкаў «радок-дадзеных» у RichTextBox
дададзена аўтар Half_Baked, крыніца

StringBuilder клас быў створаны для хуткасці. Паспрабуйце зрабіць гэта і ўбачыць, калі гэта паскарае працэс.

2
дададзена
Ці можаце вы дадаць у сваім адказе прыклад StringBuilder прымаючы спасылачныя маёй прыклад радкі коды? Як гэта будзе выкарыстоўваць StringBuilder? Я адразу замяніць тэкст RichTextBox з тэкстам StringBuilder або ... як?
дададзена аўтар ElektroStudios, крыніца
дзякуй за ваш адказ
дададзена аўтар ElektroStudios, крыніца

StringBuilder клас быў створаны для хуткасці. Паспрабуйце зрабіць гэта і ўбачыць, калі гэта паскарае працэс.

2
дададзена
Ці можаце вы дадаць у сваім адказе прыклад StringBuilder прымаючы спасылачныя маёй прыклад радкі коды? Як гэта будзе выкарыстоўваць StringBuilder? Я адразу замяніць тэкст RichTextBox з тэкстам StringBuilder або ... як?
дададзена аўтар ElektroStudios, крыніца
дзякуй за ваш адказ
дададзена аўтар ElektroStudios, крыніца

Калі першыя з прапанаваных варыянтаў не працуюць для вас, вы можаце паспрабаваць наступнае. Гэта ў 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;
2
дададзена
дзякуй за ваш адказ
дададзена аўтар ElektroStudios, крыніца

Калі першыя з прапанаваных варыянтаў не працуюць для вас, вы можаце паспрабаваць наступнае. Гэта ў 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;
2
дададзена
дзякуй за ваш адказ
дададзена аўтар ElektroStudios, крыніца