Автоматическая замена кавычек по логике Word - C#
Формулировка задачи:
Не знаю, насколько избита тема, но по данному вопросу ничего толком не нашел в инете. Предлагаю свою реализацию для тех, кому не все равно какие кавычки пользователь вводит в программу.
Написал статичный класс, который в свой единственный метод принимает параметр TextBox. Метод хорошо работает на событии OnTextChanged.
Пример реализации:
Регулярку можно написать на свой вкус и цвет, я писал для своих нужд. Если допилить, можно сократить код.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; namespace QuotesConverter_ { static class QuotesConverter { public static void QuotesReplace(TextBox tb) { string str = tb.Text; //Текст TextBox int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox char[] chars = str.ToCharArray(); //Конверт текста TextBox в символьный массив string pattern = "[«» А-Яа-я\"]"; //Шаблон регулярки Regex regex = new Regex(pattern); //Создаем регулярку MatchCollection matches = regex.Matches(str); //Запускаем поиск по регулярке в тексте TextBox if (matches.Count > 0) //Если совпадения найдены вообще { for (int ctr = 0; ctr < matches.Count; ctr++) //Циклим массив совпадений { if (!Regex.IsMatch(matches[ctr].Value, "[ А-Яа-я]")) //Проверяем, является ли текущий символ буквой или пробелом, если является, то идем дальше { if (matches[ctr - 1].Value == " ") //Проверяем, является ли предыдущий символ текущего пробелом, если является, то ... { chars[matches[ctr].Index] = '«'; //Заменяем текущий символ в массиве на открывающую "елочку" } else { chars[matches[ctr].Index] = '»'; //Иначе заменяем текущий символ в массиве на закрывающую "елочку" } } } string newstr = String.Empty; //Создаем пустую строку foreach (char c in chars) { newstr += c; //Записываем в цикле в новую строку посимвольно весь символьный массив } tb.Text = newstr; //Заменяем текст в TextBox на новую строку } tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение } } }
private void textBox1_TextChanged(object sender, EventArgs e) { QuotesConverter.QuotesReplace(sender as TextBox); }
Решение задачи: «Автоматическая замена кавычек по логике Word»
textual
Листинг программы
public static void QuotesReplace(TextBox tb) { string str = tb.Text; //Текст TextBox int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox tb.Text = QuotesReplaceToString(str); tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д