Автоматическая замена кавычек по логике 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; //Возвращаем курсор в изначальное положение
}