Курс построен как серия проектов, каждый из которых посвящен определенной теме, однако в процессе разработки проектов приводятся дополнительные сведения, что позволяет охватить очень широкий диапазон вопросов, связанных с созданием Windows-приложений. При этом особое внимание уделяется оптимальным приемам разработки приложений, управляемых событиями, и эффективному применению компонентов библиотеки Microsoft Windows Forms. Подробно обсуждаются средства, обеспечивающие удобный и надежный диалог программы с пользователем. Кроме того, рассматриваются типичные ошибки, возникающие при использовании различных классов библиотеки Windows Forms, и указываются способы их исправления.
Курс ориентирован на пользователя, владеющего основами программирования. Обязательно также знакомство с языком С# (на уровне знания системы базовых типов и управляющих операторов).
Программа курса
- Элементы управления. Свойства. События. Элементы управления Button, Label и LinkLabel, TextBox. Проект «Прыгающие кнопки».
- Проект «Калькулятор». Обработчик событий для нескольких компонентов. Вычисления с контролем правильности введённых данных. Простейшие приёмы ускорения работы с помощью клавиатуры. Использование обработчика событий от клавиатуры.Контроль за изменением исходных данных.
- Элементы управления RadioButton и Checkbox. Элемент управления GroupBox. Проект «Анкета». Информирование пользователя о возникшей ошибке.
- Элементы управления ListBox и CheckedListBox. Проект «Списки».
- Проект «Часы». Элемент управления Timer.
- Формы: проект FORMS. Проект FORMS знакомит с особенностями приложений, использующих несколько форм, и демонстрирует различные способы настройки внешнего вида форм и режимы их отображения на экране. Рассматриваются вопросы взаимодействия форм в рамках одного приложения и, в частности, проблемы, связанные с закрытием немодальных подчиненных форм. Описываются настройки для диалоговых окон и методы, обеспечивающие вывод на экран стандартных диалогов.
- Обработка событий от мыши: проект MOUSE. Проект MOUSE знакомит с обработкой событий, связанных с манипулятором «мышь». Рассматривается явление захвата мыши компонентом и проблемы, порождаемые подобным захватом. Кроме того, обсуждаются вопросы, связанные с отношением «родитель» — «дочерний компонент» и с порядком расположения дочерних компонентов в форме или другом компоненте-контейнере (z-порядок).
- Меню и работа с текстовыми файлами: проект TXTEDIT1. В этом проекте описывается создание и настройка главного меню приложения (компонент MenuStrip) и реализуются основные действия с текстовыми файлами (создание, сохранение, загрузка, а также вывод запроса о сохранении изменений, внесенных в текст). Рассматриваются особенности диалоговых компонентов SaveFileDialog и OpenFileDialog и многострочного варианта компонента TextBox.
- Дополнительные возможности меню, настройка цвета и шрифта: проект TXTEDIT2. В этом проекте описывается создание специальных команд меню (команды-флажки и команды-переключатели) и групп меню третьего уровня. Приводится реализация команд для настройки различных характеристик шрифта и выравнивания текста в окне редактора; рассматриваются связанные с этими командами свойства классов Font и TextBox. В этом проекте также реализуются стандартные команды редактирования текста, которые включаются как в главное меню (компонент MenuStrip), так и в контекстное меню редактора (компонент ContextMenuStrip). Также рассматриваются вопросы, связанные с использованием буфера обмена Windows в .NET-приложениях (класс Clipboard).
- Панель инструментов, статусная панель и подсказки: проект TXTEDIT3. Проект TXTEDIT3 продолжает серию проектов, посвященных разработке полнофункционального текстового редактора. В этом проекте создается и настраивается панель инструментов приложения (компонент ToolStrip) и ее элементы: обычные кнопки быстрого доступа, кнопки-флажки и кнопки-переключатели. Описываются действия, необходимые для добавления изображений в файл ресурсов приложения и связывания добавленных изображений с кнопками и командами меню.В этом проекте также создается и настраивается статусная панель приложения (компонент StatusStrip) и ее элементы-метки. Описываются действия, обеспечивающие проверку состояния клавиш-переключателей <Caps Lock> и <Num Lock>, скрытие и повторное отображение панели инструментов и статусной панели, а также вывод развернутой подсказки к выделенной команде меню на статусную панель. Кроме того, описывается компонент ToolTip, позволяющий связывать контекстную подсказку с любым визуальным компонентом приложения.
- Создание компонентов во время выполнения программы: проект HTOWERS. Проект HTOWERS, представляет собой компьютерную реализацию известной логической задачи «Ханойские башни». Эта задача состоит в следующем: имеются три колышка, на один из которых нанизано (в порядке уменьшения размера) несколько дисков, образующих «башню»; требуется переместить всю башню на один из пустых колышков, пользуясь другим пустым колышком как вспомогательным. Переносить можно по одному диску, причем больший диск нельзя помещать на меньший. Заметим, что для решения задачи с N дисками минимальное число переносов равно 2N — 1. В приложении HTOWERS вместо колышков используются компоненты-контейнеры GroupBox, а вместо дисков перемещаются прямоугольные блоки (компоненты Label), создаваемые непосредственно в ходе выполнения программы. Перемещение блоков реализуется с помощью механизма drag & drop. Предусматриваются средства проверки правильности решения, а также демо-режим, показывающий, в каком порядке надо перемещать блоки, чтобы решить задачу. В заключительном разделе описываются действия, позволяющие задать идентификационные данные для разработанного приложения (название приложения, его краткое описание, сведения об авторе, номер версии).
- Цвета: проект COLORS. Проект COLORS знакомит с типами, предназначенными для работы с цветом (Color, KnownColor, colorTranslator), и с компонентами, обеспечивающими прокрутку данных (TrackBar, HScrollBar, VScrollBar). Кроме того, описывается способ доступа к компонентам через клавиши-ускорители связанных с ними меток, и рассматриваются варианты привязки компонентов к границам формы (anchoring).
- Обработка наборов данных: проект STUD1. Проект STUD1 посвящен стандартным средствам .NET, связанным с обработкой наборов данных, включая их привязку к компонентам формы (data binding). В нем создается класс student с описанием структуры данных, рассматривается компонент BindingSource и описываются действия, необходимые для связывания с помощью данного компонента созданной структуры с таблицей типа DataGridview. Также описываются способы контроля правильности вводимых данных на уровне отдельной ячейки таблицы и строки в целом, демонстрируется использование столбцов таблицы различных типов (столбцы с ячейками-флажками и ячейками — выпадающими списками) и рассматриваются простейшие средства XML-сериализации наборов данных. Описывается компонент BindingNavigator, предоставляющий дополнительные средства навигации и редактирования набора данных, и приводится пример автоматизации действий при добавлении нового элемента в набор данных. Дополнительно описывается механизм автогенерации кода, реализованный в среде Visual С#, и связанные с ним шаблоны (code snippets).
- Дополнительные возможности, связанные с обработкой наборов данных: проект STUD2. Проект STUD2 посвящен дополнительным средствам, связанным с обработкой наборов данных и их привязкой к компонентам формы. В нем демонстрируется создание подчиненных наборов данных, связываемых с элементами основного набора и отображаемых в дополнительных (подчиненных) таблицах; описываются средства, позволяющие связывать элементы набора данных с произвольными визуальными компонентами (не обязательно таблицами); рассматриваются Дополнительные возможности, связанные с таблицей DataGridView (использование выпадающих списков для отображения полей с нетекстовой информацией, использование столбцов с вычисляемыми полями). Кроме того, рассматривается компонент TabControl и демонстрируются способы сортировки и поиска данных, основанные на применении функций сравнения (comparison) и тестовых функций (predicate).
- Приложение с заставкой: проект TRIGFUNC. Проект TRIGFUNC демонстрирует дополнительные возможности компонента-таблицы DataGridview, связанные с настройкой свойств ее столбцов. В нем также описываются приемы, связанные с обработкой параметров командной строки, отображением на экране окна-заставки с особыми свойствами и досрочным завершением программы. Рассматривается метод Sleep класса Thread, метод DoEvents класса Application и компонент ProgressBar (индикатор хода процесса).
- MDI-приложение: проект JPEGVIEW. Проект JPEGVIEW посвящен приложениям с многодокументным интерфейсом (MDI-приложениям). Рассматриваются вопросы, связанные со взаимодействием главной формы и дочерних форм (child-форм), описываются способы реализации стандартных действий над дочерними формами (варианты размещения на экране, вывод списка child-форм в меню, одновременное закрытие всех child-форм и т. д.). Кроме того, реализуется режим масштабирования изображения в child-форме и возможность прокрутки содержимого формы с помощью клавиатуры.
