2016-03-29 10 views
0

Ich versuche, eine Syntaxhervorhebung Feature zu meinem Textfeld hinzuzufügen, aber ich habe ein Problem. Nach stundenlanger Suche fand ich einen Post mit genau dem, wonach ich suchte. Hier ist der Code, der für Wörter in einer Liste durchsucht, und hebt sie:VB.Net So markieren Sie nur die aktuelle Zeile

 If editorBox.Text.Length > 0 Then 
     Dim selectStart As Integer = editorBox.SelectionStart 

     editorBox.Select(0, editorBox.Text.Length) 

     editorBox.SelectionColor = Color.White 


     editorBox.DeselectAll() 

     For Each oneWord As String In syntax 

      Dim pos As Integer = 0 

      Do While editorBox.Text.ToUpper.IndexOf(oneWord.ToUpper, pos) >= 0 

       pos = editorBox.Text.ToUpper.IndexOf(oneWord.ToUpper, pos) 

       editorBox.Select(pos, oneWord.Length) 

       editorBox.SelectionColor = Color.DodgerBlue 
       editorBox.SelectionFont = New Font(editorBox.SelectionFont, FontStyle.Bold) 



       pos += 1 

      Loop 

     Next 

     editorBox.SelectionStart = selectStart 

     editorBox.SelectionLength = 0 

    End If 

Ich habe durch diese Zeilen lesen, und ich verstehe das meiste davon. Ab sofort wählt es jedoch das gesamte Textfeld aus und markiert es, indem es alle Wörter erneut durchsucht und einfärbt. Nach 50 Zeilen wird es sehr schlecht und lückig. Ich dachte mir, wenn ich nur die aktuelle Zeile auswähle, wird es überhaupt nicht Laggy. Ich habe folgendes versucht, aber es scheint nicht zu funktionieren:

editorBox.Select(editorBox.GetFirstCharIndexOfCurrentLine, editorBox.Text.Length) 

Auch wenn ich ‚Raum‘ getroffen, hebt es nach wie vor alle der Textbox. Kann ich sonst noch etwas tun, um nur die aktuelle Zeile auszuwählen und hervorzuheben?

+0

Sie scheinen sich etwas Mühe gegeben zu haben, aber ich muss Ihnen immer noch empfehlen, etwas zu verwenden, das speziell für Syntax-Highlighting entwickelt wurde. Die Verwendung von 'Select',' SelectionStart'/'-Length' usw. wird verzögert, da das Steuerelement die Auswahl tatsächlich zeichnet, obwohl es schnell genug ist, dass Sie es möglicherweise nicht sehen. –

+0

Ich habe versucht, meine eigene Syntaxhervorhebung zu einem Zeitpunkt zu machen, am Ende habe ich von ScintillaNET erfahren, welches ein Steuerelement für die .NET-Sprachen ist, basierend auf dem nativen Scintilla-Steuerelement. Es macht Syntax-Hervorhebung perfekt ohne Verzögerung oder Speicher essen. [ScintillaNET 2.6] (https://scintillanet.codeplex.com/) - [ScintillaNET 3.x] (https://github.com/jacobslusser/ScintillaNET). –

+0

Kann ich benutzerdefinierte Keywords erstellen, die hervorgehoben werden sollen? Wie auch immer, danke für den Vorschlag. Ich habe davon schon mal gehört, aber nie wirklich verstanden, wie man es benutzt. Ich versuche es mal. – Anonymouse

Antwort

0

Sie müssen bei der aktuellen Zeile beginnen, was das tut, aber dann markieren Sie den Rest des Textes in diesem Code. Finden Sie VbNewLine von GetFirstCharIndexOfCurrentLine und verwenden Sie diese.

+0

Ist es bei editorBox.select (pos ...) seit pos ist 0? Wenn ja, würde ich einfach pos durch die aktuelle Zeile ersetzen? Danke – Anonymouse

+0

Startposition ist in Ordnung, Sie wählen den Rest des Textes mit text.length. –

Verwandte Themen