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?
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. –
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). –
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