2 Stimmen

RichTextBox ändert Buchstabenfarbe - Geschwindigkeitsproblem

Meine Datei besteht aus 450 503 Buchstaben Text. Ich muss jeden Buchstaben (z.B. 'b' - nach Wahl des Benutzers) durch einen anderen ersetzen und ihn mit roter Farbe markieren. Wenn ich es auf diese Weise tun:

 for(int i=0; i<lenght; ++i) {
    this.rtb.Select(i, 1);
    this.rtb.SelectionColor = Color.Red;
    this.rtb.SelectedText = this.rtb.SelectedText;
    this.rtb.DeselectAll();
 }

Es ist zu langsam - eigentlich hat es nie aufgehört... (17 Minuten Wartezeit). Ich habe keine Ahnung, wie man es beschleunigen kann.

0voto

msarchet Punkte 14846

Das liegt daran, dass Sie es zwingen, jedes Mal neu zu zeichnen, wenn es passiert.

Wickeln Sie dies in eine SuspendLayout et ResumeLayout

0voto

Paul Sasik Punkte 76202

Versuchen Sie anzurufen rtb.SuspendLayout(); bevor Sie Ihre Logik ausführen und rtb.ResumeLayout(); danach. Etwa so:

rtb.SuspendLayout();

for(int i=0; i<lenght; ++i) {
    this.rtb.Select(i, 1);
    this.rtb.SelectionColor = Color.Red;
    // you shouldn't need these lines:
    // this.rtb.SelectedText = this.rtb.SelectedText;
    // this.rtb.DeselectAll();
 }

rtb.ResumeLayout();

Abgesehen von der Optimierung müssen Sie irgendwann überprüfen, ob der ausgewählte Buchstabe der gewünschte ist. In der aktuellen Schleife wird versucht, jeden einzelnen Buchstaben rot zu färben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X