2016-06-15 12 views
0

Ich versuche, einen einfachen WYSIWYG-Editor zu machen. Ich fand es ziemlich schwierig, das rtb zu formatieren. Es soll grundlegende Dinge wie fett, kursiv, färbend (und gemischt) formatieren.RichTextBox Formatierung ist sehr langsam

Was habe ich gefunden und versucht, so weit:

private void boldButton_Click(object sender, EventArgs e) 
{ 
    int start = rtb.SelectionStart; 
    int length = rtb.SelectionLength; 

    for (int i = start, max = start + length; i < max; ++i) 
    { 
    rtb.Select(i, 1); 
    rtb.SelectionFont = new Font(rtb.Font, rtb.SelectionFont.Style | FontStyle.Bold); 
    } 

    rtb.SelectionStart = start; 
    rtb.SelectionLength = length; 
    rtb.Focus(); 
} 

rtb = richtextbox.

Dies funktioniert wie erwartet, ist aber furchtbar langsam. Ich fand auch die Idee über die Verwendung und Formatierung direkt das RTF, aber das Format scheint zu kompliziert und sehr leicht zu verwechseln. Ich hoffe, es ist eine bessere Lösung.

Vielen Dank.

+0

Bitte definieren Sie "langsam", wo diese Langsamkeit auftritt. Fängt die Anwendung plötzlich an, wenn Sie die Fetttaste drücken? – BlackBox

+0

Mit 2^14 dauerte es etwa 2.421.2091 Sekunden. Mit 2^15 -> 4.973971 Sekunden. Es scheint ziemlich langsam für mich. Ich war expection <0,5 Sekunden. –

+0

Sie müssen die Zeichnung ausschalten, bis Sie alles in Ihrer Schleife abgeschlossen haben. Siehe [RichTextBox BeginUpdate() EndUpdate() - Erweiterungsmethoden funktioniert nicht] (http://stackoverflow.com/q/9418024/719186) – LarsTech

Antwort

1

Der Leistungseinbruch ist wahrscheinlich auf die Tatsache, Sie durch die einzelnen Zeichen sind Looping statt alles auf einmal zu tun:

 var start = this.rtb.SelectionStart; 
     var length = this.rtb.SelectionLength; 

     this.rtb.Select(start, length); 
     this.rtb.SelectionFont = new Font(this.rtb.Font, this.rtb.SelectionFont.Style | FontStyle.Bold); 
+0

Aber funktioniert nicht mit gemischten Stilen :(. Zumindest nicht für mich. Bin ich etwas falsch machen? –

+0

Schau mal hier: http://stackoverflow.com/questions/16306184/changing-font-for-richtextbox-without-losing-formatting – BlackBox

+0

Ruft nicht Dinge aus der Windows-dll Art von einem schmutzigen Trick? Vielen Dank. –

0

Ich habe das gleiche Problem selbst hatte. Interessanterweise habe ich herausgefunden, dass Sie die Formatierung um eine Größenordnung beschleunigen können, wenn Sie beim Durchschleifen nicht auf die Eigenschaften des Steuerelements verweisen. Legen Sie stattdessen die erforderlichen Steuereigenschaften in separate Variablen, bevor Sie in die Schleife wechseln. Zum Beispiel, anstatt kontinuierlich z. richTextBox1.Length, ersetzen Sie mit int len ​​= richTextBox1.Length, und verweisen Sie dann auf len innerhalb der Schleife. Anstatt auf richTextBox1.Text [index] zu verweisen, ersetzen Sie vor der Schleife durch string text = richTextBox1.Text, und schreiben Sie dann innerhalb der Schleife [index].