ПИШЕМ БЛОКНОТ НА C# - ЧАСТЬ 1 (Создаем внешний интерфейс)

Предложено написать программу на C# , повторяющую функционал стандартного блокнота Windows. В дальнейшем дополним его своим функционалом. В работе используется MS Visual Studio 2017 (C# Windows Forms).

Основной функционал:
  • Работа с файлами (создание, открытие, сохранение, параметры страницы печати, печать)
  • Правка текста (вырезать, вставить, копировать, отменить действие, удалить текст, выделить весь текст)
  • Поиск и замена текста
  • Переход к указанной строке
  • Вставка текущих даты и времени
  • Форматирование текста (выбор шрифта, размера текста, его стиля)
  • Настройки приложения (сохранение измененных параметров)
Сперва создадим внешнюю оболочку программы. Добавим в проект следующие формы:
  • MainForm - Основная форма нашего блокнота (Создана изначально как Form1, для удобства переименуем её в MainForm)
  • GoToForm - Форма для перехода к указанной пользователем строке
  • SearchForm - Форма для поиска и замены текста
  • AboutForm - Форма с информацией о программе
В процессе работы с программой мы будем изменять названия добавляемых элементов со стандартных (toopStripMenuItem1...toopStripMenuItem10) на более удобные нам. Такие имена я буду помещать в скобки напротив названия элементов.

Работаем с MainForm

Добавим на форму элемент menuStrip1 (menuStrip).


menuStrip

В нем будет располагаться меню нашего блокнота. Создадим для него элементы меню: Файл (mFile), Правка (mEdit), Формат (mFormat), Вид (mView), Справка (mHelp).

Теперь создадим подменю для этих элементов и в их свойствах сразу укажем горячие клавиши (поле "ShortcutKeys"). Добавляем элементы в меню "Файл":
  • "Создать" (mFileNew): Ctrl + N
  • "Открыть..." (mFileOpen): Ctrl + O
  • "Сохранить" (mFileSave): Ctrl + S
  • "Сохранить как..." (mFileSaveAs): Ctrl + Alt + S
  • "Параметры страницы" (mFilePageParam)
  • "Печать..." (mFilePrint): Ctrl + P
  • "Выход" (mFileExit): Alt + F4
Элементы меню "Правка":
  • "Отменить" (mEditCancel): Ctrl + Z
  • "Вырезать" (mEditCut): Ctrl + X
  • "Копировать" (mEditCopy): Ctrl + C
  • "Вставить" (mEditPaste): Ctrl + V
  • "Удалить" (mEditDel): Del
  • "Найти и заменить" (mEditFind): Ctrl + F
  • "Перейти" (mEditGo): Ctrl + G
  • "Выделить всё" (mEditGiveAll): Ctrl + A
  • "Время и дата" (mEditTime): F5
Элементы меню "Формат":
  • "Перенос по словам" (mFormatTransfer). В свойствах этого элемента изменим значение поля "CheckOnClick" на True
  • "Шрифт" (mFormatFont)
Элементы меню "Вид":
  • "Строка состояния" (mViewStatusStrip). В свойствах этого элемента изменим параметр "CheckState" на Checked и "CheckOnClick" на True.
Элементы меню "Справка":
  • "О программе" (mHelpAboutProgram)


Такой вид должны принять пункты меню в итоге.

Формирование меню завершено. Теперь добавим на форму элемент StatusStrip1 (StatusStrip). Это будет строка состояния нашего блокнота.
statusStrip

В неё мы добавим 8 элементов StatusLabel:
  • "Количество строк:" (statusLab1)
  • "0" (statusLinesCount)
  • "Количество слов:" (statusLab2)
  • "0" (statusWordsCount)
  • "Символов с пробелами:" (statusLab3)
  • "0" (statusCharSpaceCount)
  • "Символов без пробелов:" (statusLab4)
  • "0" (statusCharCount)
Теперь перейдем к главному. Добавим на форму элемент textBox1 (notebox). В его свойствах необходимо установить значение True для поля "Multiline". Для поля "Dock" установим значение Fill, чтобы наш textBox заполнил собой всё свободное пространство формы. Для поля "Scrollbars" выбираем значение Both.

Если после установки значения Fill в поле "Dock" ваш textBox закрыл собой строку состояния или меню, то нужно просто клинкуть на него правой кнопкой мыши и нажимать пункт "На передний план" пока исчезнувшие элементы не станут видимыми.

Заранее стоит установить модификатор доступа Public для поля "Modifers", чтобы позднее можно было взаимодействовать с нашим textBox через другие формы.


MainForm.cs

Работа с внешним видом основной формы завершена.

Работаем с GoToForm

Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows... - Форма Windows Forms. Указываем имя формы "GoToForm.cs".

На форму мы добавляем элементы:
  • numericUpDown(tbLineNum)
  • button1 (butGo)
  • button2 (butCancel)
  • label (labGo)

GoToForm.cs

В свойствах формы указываем следующие значения для полей:
  • FormBorderStyle - "FixedSingle" - Запрет изменения размеров окна формы
  • MinimizeBox - "False" - Запрет сворачивания окна формы
  • MaximizeBox - "False" - Запрет разворачивания окна формы
  • ShowIcon - "False" - Запрет отображения собственной иконки окна формы
  • ShowInTaskbar - "False" - Запрет отображения окна формы на панели задач
  • Text - "Перейти" - Название формы
  • TopMost - "True" - Окно формы будет расположено поверх остальных окон
Для элемента textBox (tbGo) указываем в поле "Modifers" значение Public.

Работаем с SearchForm

Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows... - Форма Windows Forms. Указываем имя формы "SearchForm.cs".

Добавим на форму элементы:
  • label (2 шт.) - в свойстве "Text" этих элементов напишем "Найти:" и "Заменить на:"
  • textBox1 (tbFind)
  • textBox2 (tbReplace)
  • checkBox1 (cbReg) - в свойстве "Text" напишем "Учитывать регистр"
  • button1 (btFind) - в свойстве "Text" напишем "Найти далее"
  • button2 (btReplace) - в свойстве "Text" напишем "Заменить"
  • button3 (btReplaceAll) - в свойстве "Text" напишем "Заменить всё"
  • button4 (btCancel) - в свойстве "Text" напишем "Отмена"
SearchForm.cs

Также в свойствах формы укажем значения аналогичные форме GoToForm.

Работаем с AboutForm

Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows... - Окно "О программе". Указываем имя формы "AboutForm.cs". В вашем проекте появится такая форма:


AboutForm.cs

По-умолчанию значения полей в форме заполняются автоматически и берутся из сведений о проекте: "Проект" - "Свойства" - "Приложение" - "Сведения о сборке...". Вы можете изменять эти сведения на своё усмотрение.

Сведения о сборке

На этом работа с внешним видом нашего блокнота завершена. Уже сейчас вы можете запустить проект и посмотреть как всё выглядит. Однако, пока это лишь "бездушная" оболочка. В следующих частях мы наполним её всеми функциями стандартного блокнота Windows.