Как реализовать базовую подсветку синтаксиса в Winforms RichTextBox? - PullRequest
5 голосов
/ 12 мая 2011

У меня есть список слов, которые я хочу выделить в моем элементе управления RichTextBox, у меня есть идея, как это сделать, но у меня проблема с анализом всего, чтобы разделить слова.

Как я могу разобратьстрока или весь текст в отдельные слова, а затем перечислите их и раскрасьте их, используя метод RichTextBox.Select().

Это хороший способ?Есть ли лучший / более быстрый способ?

Ответы [ 5 ]

2 голосов
/ 12 мая 2011

Используйте метод RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds), чтобы найти строки в элементе управления. Затем вы можете выполнить итерацию, изменив начальную точку на точку после текущего слова.

Не уверен в производительности этой схемы, но она будет работать.

http://msdn.microsoft.com/en-us/library/yab8wkhy.aspx

2 голосов
/ 12 мая 2011

Вы можете использовать Avalon Edit вместо RichTextBox, это бесплатно. Это редактор, используемый в #velop . Я думаю, что вам, возможно, придется вытащить сборку из #develop исходного кода, но это того стоит.

1 голос
/ 26 июля 2011

Вероятно, не самый быстрый способ, но он работает.
Сначала позвоните ClearHighLighting, чтобы очистить предыдущее, а затем наберите SetHighLighting

private readonly List<HighLight> _highLights = new List<HighLight>();
private class HighLight
{
  public int Start { get; set; }
  public int End { get; set; }
}

public void SetHighLighting(string text)
{

    // Clear Previous HighLighting
    ClearHighLighting();

    if (text.Length > 0)
    {
        int startPosition = 0;
        int foundPosition = 0;            
        while (foundPosition > -1)
        {
            foundPosition = richTextBox1.Find(text, startPosition, RichTextBoxFinds.None);
            if (foundPosition >= 0)
            {
                richTextBox1.SelectionBackColor = Color.Yellow;
                int endindex = text.Length;
                richTextBox1.Select(foundPosition, endindex);                        
                startPosition = foundPosition + endindex;                        
                _highLights.Add(new HighLight() { Start = foundPosition, End = endindex });
            }
        }
    }
}

public void ClearHighLighting()
{
    foreach (var highLight in  _highLights)
    {
        richTextBox1.SelectionBackColor = richTextBox1.BackColor;
        richTextBox1.Select(highLight.Start, highLight.End);                        
    }
    _highLights.Clear();
}
1 голос
/ 12 мая 2011

Вы можете использовать метод RichTextBox.Find , чтобы найти строку в вашем RichTextBox.Этот метод возвращает позицию найденного текста.Пример кода в этой ссылке выделит текст.

1 голос
/ 12 мая 2011

Попробуйте string.Split метод.Он возвращает вам массив строк, разделенных разделителем.

Также вы можете найти полезные ссылки: link1 link2

И даже больше: естьштраф пример аналогичного приложения

...