Ответы пользователя по тегу Подсветка синтаксиса
  • Подсветка синтаксиса в RichTextBox

    @noname_d
    Не знаю, как это реализовано в Notepad++, но разумнее всего обновлять подсветку только для тех строк, которые были изменены. Хотя в этом случае есть 2 трудности: во-первых, необходимо как-то отслеживать изменения и, во-вторых, обрабатывать случай, когда подсвечиваемая лексема располагается на нескольких строках (например, многие языки позволяют разбивать строки, заключенные в кавычки; справедливо ли это для PHP - не помню).
    Ответ написан
    Комментировать
  • Подсветка синтаксиса в RichTextBox

    @noname_d
    Насколько я знаю, это возможно сделать только при помощи свойства SelectionColor. Т.е. сперва нужно установить Selection на нужный участок текста, а затем задать цвет. Примерно так:

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        var currentSelStart = richTextBox1.SelectionStart;
        var currentSelLength = richTextBox1.SelectionLength;
    
        richTextBox1.SelectAll();
        richTextBox1.SelectionColor = SystemColors.WindowText;
    
        var matches = Regex.Matches(richTextBox1.Text, @"\bclass\b");
        foreach (var match in matches.Cast<Match>())
        {
            richTextBox1.Select(match.Index, match.Length);
            richTextBox1.SelectionColor = Color.Blue;
        }
    
        richTextBox1.Select(currentSelStart, currentSelLength);
        richTextBox1.SelectionColor = SystemColors.WindowText;
    }

    Разумеется, заново раскрашивать весь текст при каждом изменении неправильно. Это нужно делать более оптимальным образом. Кроме того, желательно отключить перерисовку на время раскрашивания, иначе возможны нежелательные моргания при большом размере текста. В примере этого нет, но тут вроде есть решение.
    Ответ написан
    Комментировать