Автоматическая замена кавычек по логике Word - C#

Узнай цену своей работы

Формулировка задачи:

Не знаю, насколько избита тема, но по данному вопросу ничего толком не нашел в инете. Предлагаю свою реализацию для тех, кому не все равно какие кавычки пользователь вводит в программу. Написал статичный класс, который в свой единственный метод принимает параметр TextBox. Метод хорошо работает на событии OnTextChanged.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows.Forms;
  6. using System.Text.RegularExpressions;
  7. namespace QuotesConverter_
  8. {
  9. static class QuotesConverter
  10. {
  11. public static void QuotesReplace(TextBox tb)
  12. {
  13. string str = tb.Text; //Текст TextBox
  14. int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox
  15. char[] chars = str.ToCharArray(); //Конверт текста TextBox в символьный массив
  16. string pattern = "[«» А-Яа-я\"]"; //Шаблон регулярки
  17. Regex regex = new Regex(pattern); //Создаем регулярку
  18. MatchCollection matches = regex.Matches(str); //Запускаем поиск по регулярке в тексте TextBox
  19. if (matches.Count > 0) //Если совпадения найдены вообще
  20. {
  21. for (int ctr = 0; ctr < matches.Count; ctr++) //Циклим массив совпадений
  22. {
  23. if (!Regex.IsMatch(matches[ctr].Value, "[ А-Яа-я]")) //Проверяем, является ли текущий символ буквой или пробелом, если является, то идем дальше
  24. {
  25. if (matches[ctr - 1].Value == " ") //Проверяем, является ли предыдущий символ текущего пробелом, если является, то ...
  26. {
  27. chars[matches[ctr].Index] = '«'; //Заменяем текущий символ в массиве на открывающую "елочку"
  28. }
  29. else
  30. {
  31. chars[matches[ctr].Index] = '»'; //Иначе заменяем текущий символ в массиве на закрывающую "елочку"
  32. }
  33. }
  34. }
  35. string newstr = String.Empty; //Создаем пустую строку
  36. foreach (char c in chars)
  37. {
  38. newstr += c; //Записываем в цикле в новую строку посимвольно весь символьный массив
  39. }
  40. tb.Text = newstr; //Заменяем текст в TextBox на новую строку
  41. }
  42. tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение
  43. }
  44. }
  45. }
Пример реализации:
Листинг программы
  1. private void textBox1_TextChanged(object sender, EventArgs e)
  2. {
  3. QuotesConverter.QuotesReplace(sender as TextBox);
  4. }
Регулярку можно написать на свой вкус и цвет, я писал для своих нужд. Если допилить, можно сократить код.

Решение задачи: «Автоматическая замена кавычек по логике Word»

textual
Листинг программы
  1.         public static void QuotesReplace(TextBox tb)
  2.         {
  3.             string str = tb.Text; //Текст TextBox
  4.             int SelectStart = tb.SelectionStart; //Текущая позиция курсора в TextBox
  5.            
  6.             tb.Text = QuotesReplaceToString(str);
  7.  
  8.             tb.SelectionStart = SelectStart; //Возвращаем курсор в изначальное положение
  9.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы