RichTextBox la coloration syntaxique

Je suis en train de travailler avec ce code. C'est pour la coloration syntaxique dans un RichTextBox. Je recherche précisément à la fonction ProcessLine() et OnTextChanged(), que j'ai modifiée en tant que telle:

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;
}
  • Ma première question est, quand je suis entrée dans la ProcessLine() dans OnTextChanged(), aurai-je toujours avoir un caractère de saut de ligne à la fin de m_strLine? Sera la plus petite valeur ou m_strLine être "\n" et le plus grand "tout#ofchars+\n"?

  • Et tellement j'ai ce droit, SelectionStart est ma position du curseur si SelectionLength est égale à zéro, et si SelectionLength est supérieure à zéro mon signe est à SelectStart+SelectionLength?

  • Je suis en train de modifier ce code pour la couleur tout un tas de différents syntaxe des expressions, et j'ai l'intention d'aller à travers elle un caractère à la fois, pour chaque ligne. Comment cela pourrait-il juste lors du collage ou du chargement d'un fichier de 20k lignes?

  • C'est un très de base de l'approche et de ne pas travailler avec les plus grands fragments de code. Il sera mort lente et avec beaucoup de scintillement et de bizarreries. Vous êtes beaucoup mieux de commencer avec une meilleure base de dehors-de-le-boîte de contrôle au format RTF!
  • Pourrais-je être mieux d'essayer de Regex chaque ligne, comme ils ont essayé de faire ici?
  • Aussi, Uniquement lors du chargement d'un fichier, je dois aller à travers chaque ligne. D'autre part lors de l'édition d'un fichier que j'ai n'aurez qu'à cocher une seule ligne à la fois, mais toujours le repeindre, mais uniquement dans la zone de texte que l'utilisateur peut voir dans le textarea. Sera-ce vraiment être aussi lente que tout le monde pense?
  • Si vous voulez le faire sur votre propre Costin Boldisor est un billet de blog ici blogs.msdn.microsoft.com/cobold/2011/01/31/...
InformationsquelleAutor AnotherUser | 2012-08-13