4 Stimmen

RichTextBox-Syntaxhervorhebung

Ich arbeite mit dieser Code . Sie dient der Syntaxhervorhebung in einer RichTextBox . Ich suche speziell nach der Funktion ProcessLine() y OnTextChanged() , die ich entsprechend geändert habe:

protected override void OnTextChanged(EventArgs e)
{
    // Calculate stuff here.
    m_nContentLength = this.TextLength;

    int nCurrentSelectionStart = SelectionStart;
    int nCurrentSelectionLength = SelectionLength;

    m_bPaint = false;

    // Find the start of the current line.
    m_nLineStart = nCurrentSelectionStart;
    while ((m_nLineStart > 0) && (Text[m_nLineStart - 1] != '\n'))
        m_nLineStart--;
    // Find the end of the current line.
    m_nLineEnd = nCurrentSelectionStart;
    while ((m_nLineEnd < Text.Length) && (Text[m_nLineEnd] != '\n'))
        m_nLineEnd++;
    // Calculate the length of the line.
    m_nLineLength = m_nLineEnd - m_nLineStart;
    // Get the current line.
    m_strLine = Text.Substring(m_nLineStart, m_nLineLength);

    // Process this line.
    ProcessLine();

    m_bPaint = true;
}

// Process a line.
private void ProcessLine()
{
    // Save the position and make the whole line black
    int nPosition = SelectionStart;
    SelectionStart = m_nLineStart;
    SelectionLength = m_nLineLength;
    SelectionColor = Color.Black;

    /*// Process the keywords
    ProcessRegex(m_strKeywords, Settings.KeywordColor);
    // Process numbers
    if(Settings.EnableIntegers)
        ProcessRegex("\\b(?:[0-9]*\\.)?[0-9]+\\b", Settings.IntegerColor);
    // Process strings
    if(Settings.EnableStrings)
        ProcessRegex("\"[^\"\\\\\\r\\n]*(?:\\\\.[^\"\\\\\\r\\n]*)*\"", Settings.StringColor);
    // Process comments
    if(Settings.EnableComments && !string.IsNullOrEmpty(Settings.Comment))
        ProcessRegex(Settings.Comment + ".*$", Settings.CommentColor);*/

    SelectionStart = nPosition;
    SelectionLength = 0;
    SelectionColor = Color.Red;

    m_nCurSelection = nPosition;
}
  • Meine erste Frage ist, wenn ich in die ProcessLine() en OnTextChanged() habe ich immer einen Zeilenumbruch am Ende von m_strLine ? Wird der kleinste Wert oder m_strLine sein " \n " und das größte "any#ofchars+ \n "?

  • Und nur damit ich das richtig verstehe, SelectionStart ist die Position meines Cursors, wenn SelectionLength Null ist, und wenn SelectionLength größer als Null ist, befindet sich mein Cursor bei SelectStart+SelectionLength ?

  • Ich versuche, diesen Code so zu ändern, dass er eine ganze Reihe verschiedener Syntaxausdrücke einfärbt, und ich habe vor, für jede Zeile ein Zeichen nach dem anderen zu verwenden. Wie könnte dies fair, wenn Einfügen oder Laden einer Datei von 20k+ Zeilen?

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