Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 5

Регулярные выражения - Редактор с подсветкой синтаксиса

18.04.2014, 21:18. Показов 2459. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток. Помогите разобраться с проблемой. Пишу курсовой проект "Редактор с подсветкой синтаксиса". Для парсинга текста использую регулярные выражения. Ключевые слова берутся из текстового файла. когда загружаю другой файл с другими словами, подсвечиваются всеровно предыдущие слова, хотя в процессе отладки проверял, файл новый файл открывается, слова в массив загружаются, но не подсвечиваются, а как только встречается слово из предыдущего набора они из массива пропадают, и в нем оказываются прежние слова.

Вот функция загрузки слов из файла и подсветки

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 public void Load_syntax()
        {
            int count = 0;
            String line;
 
            System.IO.StreamReader file = new System.IO.StreamReader(Form3.pathfil);
 
            while ((line = file.ReadLine()) != null)
            {
                count++;
            }
 
            lines = new String[count];
            file = new System.IO.StreamReader(Form3.pathfil);
            for (int i = 0; i < count; i++)
            {
                lines[i] = file.ReadLine();
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public void Parse_text()
        {
            var currentSelStart = richTextBox1.SelectionStart;
            var currentSelLength = richTextBox1.SelectionLength;
            foreach (string l in lines)
            {
                                
               MatchCollection matches = Regex.Matches(richTextBox1.Text, l);
               
                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;
                
            }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2014, 21:18
Ответы с готовыми решениями:

Текстовый редактор с подсветкой синтаксиса
Здравствуйте. Реализовал на контроле Richtextbox текстовый редактор с подсветкой синтаксиса, но при средних/больших размерах текста контрол...

Регулярные выражения. Подсветка синтаксиса.
Подскжите как составить выражение для поиска точного слова в строке. string = &quot;sum min max&quot; для подсветки синтаксиса ...

Редактор с подсветкой синтаксиса
Здравствуйте, помогите доделать редактор, нужно чтобы в нём все слова и не только слова с символом $hForm или $839625 тоже подсвечивались. ...

8
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18263 / 14188 / 5366
Регистрация: 17.03.2014
Сообщений: 28,872
Записей в блоге: 1
20.04.2014, 10:15
walkman950, RichTextBox запомнил цвет ранее выделенного текста и поэтому подсвечивает старые и новые слова. Тебе надо после загрузки нового списка слов сбросить цвет всего текста внутри RichTextBox. Например, так:
C#
1
2
3
4
5
6
7
8
9
10
11
private static void ResetSelection(RichTextBox textBox)
{
    int curSelectionStart = textBox.SelectionStart;
    int curSelectionLength = textBox.SelectionLength;
 
    textBox.SelectionStart = 0;
    textBox.SelectionLength = textBox.Text.Length;
    textBox.SelectionColor = textBox.ForeColor;
 
    textBox.Select(curSelectionStart, curSelectionLength);
}
P.S. Функция Load_syntax() написана плохо.

1) Ты не закрываешь StreamReader после использования. Следует вызывать Close() или использовать блок using

2) Ты повторно открываешь тот же самый файл на чтение, когда есть возможность начать чтение с начала:
C#
1
2
file.BaseStream.Position = 0;
file.DiscardBufferedData();
3) И главное. Весь код Load_syntax() можно заменить одной строкой:
C#
1
lines = File.ReadAllLines(Form3.pathfil);
0
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 5
20.04.2014, 11:36  [ТС]
C функцией readline разобрася, а вот подсветка все равно не работает, сброс текстбокса не помогает( всеровно подсвечиваются только слова из предыдущего файла
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18263 / 14188 / 5366
Регистрация: 17.03.2014
Сообщений: 28,872
Записей в блоге: 1
20.04.2014, 11:44
walkman950, значит у тебя где-то еще ошибка. Нужно смотреть весь твой код чтобы понять что не так.
0
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 5
20.04.2014, 11:47  [ТС]
возможно я не совсем правильно описал проблему, подсветка слов работает, только когда загружаются в массив новые слова, если их уже писать в текстбоксе они не подсвечиваются, а если писать старые слова, которых в массиве уже нет они всеровно подсвечиваются.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18263 / 14188 / 5366
Регистрация: 17.03.2014
Сообщений: 28,872
Записей в блоге: 1
20.04.2014, 12:20
walkman950, а ты вызываешь функцию Parse_text() при изменении текста в RichTextBox? Это можно сделать через событие TextChanged, например.
0
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 5
20.04.2014, 12:32  [ТС]
так и есть. Вообщем вот проект, если есть желание, гляньте форма 1 и форма 3,форма 2 там другое задние, а в настройках выбирается файл со словами (по умолчанию стоит файл в папке с проектом).
Вложения
Тип файла: rar project.rar (93.1 Кб, 10 просмотров)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18263 / 14188 / 5366
Регистрация: 17.03.2014
Сообщений: 28,872
Записей в блоге: 1
20.04.2014, 19:40
Лучший ответ Сообщение было отмечено walkman950 как решение

Решение

walkman950, у тебя ошибка в классе Form3 где ты создаешь новый экземпляр Form1 и вызываешь методы Load_syntax() и Parse_text() на нём, в то время как нужно работать с уже существующим экземпляром. Чтобы исправить делаем следующее:

В файле Form3.cs:
C#
1
2
3
4
5
6
Form1 form1;
public Form3(Form1 form1)
{
    InitializeComponent();
    this.form1 = form1;
}
В файле Form1.cs в строке №234 меняем Form3 form3 = new Form3(); на Form3 form3 = new Form3(this);

Это вроде исправляет ошибку про которую ты говоришь, но в коде еще целая куча заботливо разложенных граблей.

1) Избавься от static полей в Form3.
2) нет проверок на DialogResult при вызове ShowDialog()
3) давай нормальные имена своим контролам. button1, textBox1 - плохие имена. buttonOk, textBoxPath - хорошие.
4) Для хранения настроек стоит использовать стандартный механизм Windows Forms или сделать собственный класс.
5) Вместо прямого вызова методов Load_syntax() и Parse_text() из Form3 лучше уведомлять главную форму о изменении настроек с помощью события.
6) Цвет подсветки ключевых слов и комментариев лучше вынести в настройки и ссылаться на них вместо явно указанных констант в коде. Такой код будет проще поддерживать.
1
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 5
20.04.2014, 19:50  [ТС]
огромное спасибо!!!!) Все работает!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2014, 19:50
Помогаю со студенческими работами здесь

Редактор кода с подсветкой синтаксиса
Как реализовать мою задумку в Dev C++?? Как я понимаю ,сначала берём и создаём большое текстовое поле и при вводе каждого символа надо...

Встроить текстовый редактор с подсветкой питоновского синтаксиса
Есть прога на Qt. Задача встроить в нее минималистичный текстовый редактор с подсветкой синтаксиса языка питон. Особых требований нет....

Скрипт, редактор html,css,js на сайт с подсветкой синтаксиса
Какой есть хороший cкрипт, редактор html,css,js для установки на сайт, с подсветкой синтаксиса?

Посоветуйте хороший простой текстовый редактор с подсветкой синтаксиса
На лине Mousepad или gEdit юзал. Здесь хз, врвмени нет все пробовать. Пока TextWrangler стоит, но он шлак. Прошу помочь советом.

Подскажите пожалуйста текстовый редактор с настраиваемой подсветкой синтаксиса
В gedit2 есть, но я не понимаю особо язык XML на котором написан его конфиг-файл, поставил в нём всё на один цвет и дальше в тупике.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru