close

Вход

Забыли?

вход по аккаунту

код для вставкиСкачать
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное образовательное учреждение
высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Факультет математики, механики и компьютерных наук
Рассмотрено и рекомендовано
на заседании кафедры алгебры
и дискретной математики мехмата ЮФУ
УТВЕРЖДАЮ
Декан мехмата
_____________ Карякин М.И.
Протокол № от
2010 г.
Зав. кафедрой _________ Штейнберг Б.Я.
«_____» ____________ 2010 г.
УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС
ПО ДИСЦИПЛИНЕ
«ПРОГРАММИРОВАНИЕ В СРЕДЕ VISUAL C#»
для программы бакалавриата
по специальности 010500
и направлению подготовки «Прикладная математика»
Составитель:
ст. преподаватель Мачулина Л.А.
Ростов-на-Дону
2010
Содержание
Пояснительная записка ........................................................................................... 3
Учебно-тематический план .................................................................................... 5
Рабочая программа .................................................................................................. 7
Модуль 1. Среда разработки программ Microsoft Visual Studio .NET ....... 7
Модуль 2. Работа с текстом, цветом, датой и временем,
перетаскивание ................................................................................... 19
Модуль 3. Работа с графическими и текстовыми файлами ...................... 26
Модуль 4. Компонент-таблица. Создание компонентов во время
выполнения программы ..................................................................... 34
Учебно-практические пособия ............................................................................. 37
Программное обеспечение, необходимое
для проведения практических занятий ............................................ 37
Технология обучения ............................................................................................ 37
Рекомендуемая литература ................................................................................... 38
2
Программа курса «Программирование в среде Visual C#»
для программы бакалавриата
по направлению ПРИКЛАДНАЯ МАТЕМАТИКА
Количество часов: 72 (4 курс, 7 семестр)
Аудиторно: лабораторные занятия — 36
Самостоятельная работа: 36
Отчетность по курсу: зачет
Пояснительная записка
Настоящий курс является продолжением в обучении программированию, в
частности приобретению навыков и изучению создания Windows-приложений
для платформы .NET Framework в среде Microsoft Visual C# . Рассматриваются
оптимальные
приемы
особенности
создания
Рассматриваются
разработки
программ,
консольных
особенности
и
управляемых
графических
использования
основных
событиями,
приложений.
компонентов
библиотеки Windows Forms и классы, входящие в графическую библиотеку
GDI+.
Цели курса: выработка и закрепление у студентов приемов и навыков,
связанных с созданием современного программного обеспечения, умение
пользоваться стандартными объектными библиотеками и интегрированными
средами разработки. Для достижения поставленных целей идеально подходит
платформа .NET Framework и языки, разработанные для этой платформы, в
частности, язык Visual C#.
3
Актуальность курса. Платформа .NET в настоящее время активно
используется
при
разработке
программных
комплексов
в
различных
предметных областях. Среди ее преимуществ можно отметить [3–7]:
 единую программную модель,
 возможность использования на различных аппаратных платформах,
 интеграцию языков программирования,
 упрощенное повторное использование кода,
 автоматическое управление памятью,
 проверку безопасности типов,
 развитую поддержку отладки,
 единый принцип обработки ошибок,
 возможность взаимодействия с существующим кодом,
 богатую библиотеку классов, доступную для любого языка.
Преимущества платформы .NET и ее широкое распространение делают
весьма актуальным изучение ее возможностей в рамках специального курса.
Учебный курс состоит из 4 учебных модулей:
 «Среда разработки программ Microsoft Visual Studio .NET»;
 «Работа с текстом, цветом, датой и временем, перетаскивание»;
 «Работа с графическими и текстовыми файлами»;
 «Компонент-таблица. Создание компонентов во время выполнения
программы»;
Основным материалом, используемым в курсе, является книга «Visual C#
на примерах», автором которой является М. Э. Абрамян. [2]. В рамках данного
спецкурса рассматривается и разбирается большинство примеров приложений,
представленных в книге. Это позволяет студентам выполнить самостоятельно
набор индивидуальных заданий для закрепления полученных знаний.
Курс завершается зачетом. Трудоемкость курса может быть оценена как
средняя, с учетом того базового набора знаний, умений и навыков, которые
4
студенты уже получили к началу изучения данного курса и получили в
процессе обучения в рамках курса.
5
Учебно-тематический план
Лабораторные занятия
№
Часы
Тема
Лаб. С.р.
Модуль 1. Среда разработки программ Microsoft Visual Studio .NET
Создание, сохранение и запуск нового проекта. Форма и
компоненты формы. Свойства и обработчики событий. 2
1
Создание консольного приложения с параметрами
командной строки.
2 Обработка исключений. Разработка программ, управляемых 2
событиями (events).
3 Создание приложения, состоящего из нескольких форм
2
4
различного типа.
4 Совместное использование обработчиков событий
2
2
и работа с клавиатурой.
Модуль 2. Работа с текстом, цветом, датой и временем, перетаскивание
2
7
Классы-обобщения, внедрение в приложения графических
2
ресурсов, работа с областью уведомлений панели задач.
Работа с полями ввода. Типы, предназначенные для работы с 2
цветом.
Обработка событий от мыши
2
8
Режим перетаскивания
2
4
9
Типы данных и компонент для работы с датой и временем.
2
4
2
2
2
6
2
4
2
8
5
6
10 Компоненты, обеспечивающие визуализацию файловой
структуры. Просмотр изображений
Модуль 3. Работа с графическими и текстовыми файлами.
Создание, сохранение и загрузка графических файлов.
11 Рисование тонким пером. Рисование цветным пером.
Рисование фигур, добавление в рисунок текста.
Компоненты для создания меню. Невизуальные
12 компоненты для открытия и сохранения файлов, установки
свойств шрифта. Реализация операций редактирования.
Создание контекстного меню.
13 Создание панели инструментов с кнопками быстрого
6
доступа, изображения в пунктах меню. Форматирование
символов и абзацев.
Выпадающие и обычные списки, стандартные действия над
14 элементами списка. Списки с множественным выделением и 2
графические списки.
Модуль 4. Компонент-таблица. Создание компонентов во время
выполнения программы
15 Таблица с текстовыми данными
2
16 Таблица с графическими данными
2
17 Приложение с заставкой, таблица тригонометрических
функций.
18 Реализация задачи «Ханойские башни».
2
7
2
4
Рабочая программа
Модуль 1. Среда разработки программ Microsoft
Visual Studio .NET
Цель обучения
Создание представления о платформе .NET Framework и ее элементах.
Знакомство с приемами работы в интегрированной среде Microsoft Visual Studio
2008.
Содержание занятий
Создание, сохранение и запуск нового проекта. Форма и
компоненты формы. Свойства и обработчики событий.
Создание консольного приложения с параметрами командной
строки
1. Создание, сохранение и запуск нового проекта.
Среда Visual C# организована таким образом, что в ней нельзя создать
«отдельно взятый» проект. Каждый проект должен содержаться в особой
сущности, называемой Solution («Решение»), которую можно охарактеризовать
как группу взаимосвязанных проектов (по этой причине в данной книге термин
«Solution» мы будем переводить как «Группа проектов»). В каждый момент
времени в среду Visual C# можно загрузить только одну группу проектов;
загрузка другой группы приводит к автоматическому закрытию предыдущей.
При создании нового проекта на экране возникает диалоговое окно, в
котором надо выбрать тип проекта и его имя. В качестве типа для всех
приложений, кроме DISKINFO и EXCEP, следует выбирать «Windows
Application. Имя проекта может содержать не только цифры и латинские буквы,
8
но и другие символы, допустимые в именах файлов, в том числе пробелы и
русские буквы, хотя этой возможностью не следует злоупотреблять.
В среде Visual Studio при создании нового проекта необходимо сразу
указать каталог для его сохранения (поле «Location»). На размещение проекта
также влияет информация, связанная с группой проектов (solution), в которую
будет помещен создаваемый проект, в частности, флажок «Create directory for
solution». Если в группу будет входить единственный проект, то следует
отключить данный флажок; это приведет к тому, что созданная группа
проектов будет иметь то же имя, что и созданный проект, а в каталоге,
указанном в поле «Location», будет создан каталог с именем проекта, в котором
будут размещаться все файлы, связанные с проектом и его группой .
2. Форма и компоненты формы.
При создании нового проекта типа «Windows Application» связанная с
ним главная форма (класс с именем Form1) создается автоматически и сразу
загружается в среду Visual C#. С данной формой связывается набор файлов,
основными из которых являются файлы Form1.cs и Form1.Designer.cs. В этих
файлах содержится описание данной формы на языке C#, причем второй из них
содержит ту часть описания, которая генерируется автоматически в ответ на
различные действия разработчика, связанные с визуальным проектированием
(собственный код разработчик обычно размещает в файле Form1.cs).
Если в проекте требуется использовать дополнительные формы, то их
проще всего добавить в проект с помощью команды меню «Project | Add Windows Form». При выполнении этой команды возникает диалоговое окно, в
котором надо указать имя добавляемой формы (которое одновременно будет и
начальной частью имен файлов, содержащих ее описание). В примерах из
данной книги используются имена форм, предлагаемые системой по
умолчанию (Form1, Form2 и т. д.).
9
Любая созданная форма отображается в редакторе Visual C# в режиме
дизайна (на экране появляется изображение формы и ее содержимого);
соответствующая
вкладка
редактора
заканчивается
текстом
«[Design]»,
например, для главной формы вкладка содержит текст «Form1.cs [Design]». Для
перехода к содержимому соответствующего cs-файла достаточно нажать [F7];
при этом в редакторе появится новая вкладка с текстом данного файла
(ярлычок этой вкладки будет содержать имя файла, например, «Form1.cs»).
Для размещения на форме нового компонента следует воспользоваться
окном компонентов Toolbox (отобразить это окно на экране можно либо
командой меню «View | Toolbox», либо комбинацией [Ctrl]+[Alt]+[X], либо
кнопкой ). Надо выбрать в этом окне группу, содержащую нужный компонент
(щелкнув на имени этой группы), затем щелкнуть на изображении нужного
компонента, и, наконец, щелкнуть на форме в том месте, где предполагается
разместить данный компонент.
Для
быстрого
размещения
на
форме
нескольких
однотипных
компонентов следует после выбора требуемого компонента в окне компонентов
щелкать на форме несколько раз, держа нажатой клавишу [Ctrl].
3. Свойства и обработчики событий.
Для настройки свойств форм и компонентов используется окно свойств
Properties, быстро перейти на которое можно с помощью комбинации
[Alt]+[Enter] (вернуться обратно на форму можно с помощью комбинации
[Ctrl]+[Tab]). Данное окно может находиться в двух режимах; в данном пункте
мы рассмотрим режим «Properties», предназначенный для отображения свойств
выделенного компонента или группы компонентов (для перехода в данный
режим надо нажать третью кнопку на панели инструментов окна свойств).
У всех компонентов имеется не только набор свойств, но и набор так
называемых событий, с которыми можно связать функции — обработчики
событий. Список обработчиков для выделенного компонента или группы
10
компонентов отображается в окне свойств в режиме «Events» (для перехода в
данный режим надо нажать четвертую кнопку на панели инструментов окна
свойств). Список событий, как и список свойств, можно упорядочивать двумя
способами: по категориям и по именам (в алфавитном порядке).
Обработчик любого события для любого компонента оформляется как
метод той формы, на которой расположен данный компонент.
4. Создание консольного приложения с параметрами командной строки.
Проект DISKINFO знакомит с приемами разработки консольных
приложений.
Описывается
структура
консольного
приложения
и
подключаемые к нему пространства имен. Рассматривается форматированный
вывод, в частности, использование управляющих последовательностей.
Описываются классы DriveInfo, StringBuilder и Environment. Рассматриваются
вопросы, связанные с использованием параметров командной строки.
Обработка исключений. Разработка программ, управляемых
событиями (events).
1. Обработка исключений.
Проект EXCEP знакомит с приемами обработки исключительных
ситуаций (исключений). Описывается структура try-блоков и демонстрируются
особенности, связанные с использованием вложенных try-блоков. Дается обзор
ис-ключений, связанных с арифметическими операциями и связанные с ними
операторы checked и unchecked. Описываются действия, которые можно
выполнить при возникновении исключения в различных режимах запуска
прило-жения. Рассматривается метод Parse преобразования строки в число и
оператор
throw
возбуждения
исключения
(в
том
числе
повторного).
Описывается вариант try-блока, использующий раздел finally.
В данном примере, как и в предыдущем, будет разрабатываться
консольное приложение.
11
Использованный метод Parse для типа int позволяет преобразовать
указанную строку к данному типу. Аналогичный метод имеется и у других
числовых типов, например, у типа double. Следует иметь в виду, что при
преобразовании строки в вещественное число символ разделителя дробной
части определяется из настроек операционной системы Windows, поэтому в
программе, выполняемой в русской версии Windows, в качестве десятичного
разделителя необходимо вводить запятую.
Если параметр метода Parse невозможно преобразовать к указанному
числовому типу, то возбуждается исключение.
Добиться исключения OverflowException при выполнении операций с
вещественными числами невозможно (если получающееся число окажется
слишком большим, то будет возвращено особое значение типа double: double.PositiveInfinity («положительная бесконечность»), с которым можно
выполнять различные действия так же, как и с обычными числами. Имеются
еще
два
особых
вещественных
значения:
double.NegativeInfinity
—
«отрицательная бесконечность» и double.NaN — «не число». Особые значения
могут
быть,
в
частности,
возвращаемыми
значениями
стандартных
математических функций, определенных в классе Math (в нашей программе
мы воспользовались функцией Pow из этого класса, позволяющей выполнить
возведение в степень). Например, Math.Sqrt(–1) (квадратный корень) вернет
double.NaN,
а
Math.Log(0)
(натуральный
логарифм)
вернет
dou-
ble.NegativeInfinity.
Целочисленное переполнение тоже не всегда приводит к возбуждению
исключения. При стандартных настройках проекта в подобной ситуации
исключение не возбуждается, а слишком большое целочисленное значение
«усекается» посредством отбрасывания «лишних» байтов. Если такое
поведение при целочисленном переполнении нежелательно (как в нашей
ситуации), то можно включить явный контроль за переполнением, заключив
12
«опасное» выражение в конструкцию checked с круглыми скобками. Данную
конструкцию можно использовать для «защиты» не только выражений, но и
группы операторов; в этом случае ее синтаксис следующий: checked {
операторы }. Следует, однако, иметь в виду, что если среди указанных
операторов имеются вызовы методов, то внутри этих методов контроль за
целочисленным переполнением выполняться не будет.
Имеется также «парная» конструкция unchecked, отключающая контроль
за целочисленным переполнением. Благодаря отключенному контролю,
операции над целочисленными данными выполняются существенно быстрее.
Установить контроль за целочисленным переполнением на уровне всего
проекта можно, изменив его настройки. Для этого надо выполнить команду
«Project | <имя проекта> Properties…», перейти в появившемся окне редактора
в группу «Build», нажать кнопку «Advanced» и установить в появившемся
окне флажок «Check for arithmetic overflow/underflow».
В реальных программах не рекомендуется перехватывать «все возможные
исключения», используя раздел catch с базовым классом-исключением
Exception. Вместо этого следует обрабатывать только те исключения, способ
обработки которых известен; для каждого такого типа исключения надо
использовать свой раздел catch. В этом случае может оказаться полезным
дополнительный раздел try-блока с именем finally, который располагается
после всех разделов catch и содержит код, выполняющий очистку ресурсов,
выделенных в программе, и другие завершающие действия. Раздел finally
выполняется всегда: и при «нормальной» работе операторов в разделе try, и при
возбуждении исключения, причем даже в ситуации, если это исключение не
было перехвачено в предыдущих разделах catch.
2. Разработка программ, управляемых событиями (events).
Проект EVENTS знакомит с базовыми приемами разработки программ,
управляемых событиями (events). Демонстрируется связывание события с
13
обработчиком (в режиме дизайна и на программном уровне), отключение
обработчика от события и его повторное подключение. Рассматривается класс
Random и свойства визуальных компонентов, связанные с их размером и
положением на экране. Дается обзор структуры графического Windowsприложения и входящих в него элементов.
Положение и размеры любого визуального компонента (то есть потомка
класса Control), в том числе и самой формы, можно определить и изменить с
помощью набора свойств. За положение отвечает уже упомянутое свойство
Location, а также свойства Left и Top типа int. Данные свойства (как и поля X
и Y свойства Location) определяют координаты левого верхнего угла
компонента относительно левого верхнего угла клиентской части формы (в
клиентскую часть формы не входит ее заголовок и рамка). В случае формы эти
свойства определяют координаты левого верхнего угла формы относительно
левого верхнего угла экрана. За размер отвечает свойство Size —структура
типа Size с полями Width и Height типа int, а также отдельные свойства Width
и Height типа int. Отметим также свойства Right и Bottom типа int,
определяющие координаты правого нижнего угла визуального компонента.
Все координаты указываются в пикселах.
Итак, введя в окне свойств несколько строк, выполнив несколько щелчков
мышью
и
набрав
в
редакторе
две
строки
текста,
мы
получили
работоспособную программу с достаточно сложным поведением. Подобный
способ разработки программ может вызвать ряд вопросов у программиста,
привыкшего писать весь текст программы в редакторе кода. Ответы на эти
вопросы позволят прояснить основные механизмы функционирования
визуальных средств разработки, а также принципы работы программ,
управляемых событиями.
Вся эта информация о компонентах, размещенных на форме и их
свойствах, настроенных с помощью окна свойств, сохраняется в текстовом
14
файле,
связанном
Form1.Designer.cs).
с
дизайнером
Хотя
обычно
формы
(этот
необходимости
файл
в
его
имеет
имя
«ручной»
корректировке нет, полезно познакомиться с его содержимым, загрузив
данный файл в редактор (для этого достаточно выполнить двойной щелчок
мышью на его имени в окне «Solution Explorer». Файл Form1.Designer.cs
содержит ту часть описания класса Form1, которая непосредственно связана с
визуальным проектированием. В частности, в конце данного файла
содержится список всех компонентов, помещенных на форме; в нашем случае
таким компонентом является кнопка:
private System.Windows.Forms.Button button1;
Далее, если развернуть скрытый раздел описания, помеченный текстом
«Windows Form Designer generated code» («Код, сгенерированный дизайнером
форм»), щелкнув мышью на изображении знака «+», то мы увидим фрагмент
программы, содержащий все настройки свойств, сделанные нами с помощью
окна Properties.
Отметим, что изменение данных свойств непосредственно в тексте файла
Form1.Designer.cs немедленно скажется на виде формы
Итак, можно сказать, что все действия, связанные с размещением
компонентов на форме и с настройкой их свойств, можно выполнять и в
режиме «обычного» кодирования (именно так делается в книгах [3] и [4]);
визуальные средства, в частности, окна Toolbox и Properties, лишь ускоряют
этот процесс и делают его более наглядным.
Одновременно с созданием заготовки для метода button1_Click в окне
свойств рядом с текстом Click появляется имя метода button1_Click (в этом
можно убедиться, вернувшись в режим дизайна формы, выделив кнопку и
перейдя в окне свойств в режим «Events», нажав на кнопку ). Иными словами,
значение события Click для компонента button1 становится равным button1_Click. В файле Form1.Designer.cs соответствующее действие оформляется
в виде следующего оператора (следует отметить, что этот оператор содержит
15
много избыточных элементов — достаточно сравнить его с операторами
подключения обработчиков, которые используются далее, в п. 3):
this.button1.Click += newSystem.EventHandler(this.button1_Click);
Все события компонентов, отображаемые в окна свойств в режиме
«Events», по умолчанию являются пустыми, то есть не связанными с какимилибо обработчиками. Если же некоторое событие связано с обработчиком (в
нашем случае событие Click связано с методом button1_Click), то при
наступления соответствующего события (например, при нажатии на кнопку)
компонент вызывает тот метод-обработчик, который присоединен к нему. При
этом первый параметр обработчика (sender) позволяет определить, какой
компонент вызвал данный обработчик, а второй параметр (e) может содержать
дополнительную информацию о событии.
Любая программа на языке C# начинается с выполнения стартового
метода, который по умолчанию имеет имя Main. В шаблоне Windowsприложений, создаваемых в Visual C#, данный метод размещается в файле
Program.cs.
Этот
файл
создается
автоматически,
и,
подобно
файлу
Form1.Designer.cs, связанному с дизайнером формы, как правило, не требует
«ручной» корректировки. Загрузив этот файл в редактор, мы увидим, что
метод Main содержит три оператора, важнейшим из которых является
последний:
Application.Run(new Form1());
Данный оператор создает экземпляр главной формы приложения (типа
Form1) и запускает цикл обработки событий, который работает до тех пор,
пока в главной форме не произойдет событие Close. При закрытии главной
формы выполнение приложения завершается.
Создание
приложения,
состоящего
различного типа.
16
из
нескольких
форм
Проект FORMS знакомит с особенностями приложений, использующих
несколько форм, и демонстрирует различные способы настройки внешнего
вида форм и режимы их отображения на экране. Рассматриваются вопросы
взаимодействия форм в рамках одного приложения и, в частности, проблемы,
связанные с закрытием немодальных подчиненных форм. Описываются
настройки для диалоговых окон и методы, обеспечивающие вывод на экран
стандартных диалогов .
Совместное использование обработчиков событий
и работа с клавиатурой
Проект CALC знакомит с совместным использованием обработчиков
несколькими
компонентами.
Кроме
того,
в
нем
демонстрируется
использование механизма обработки исключений для обработки ошибок ввода
и рассматриваются различные варианты ускорения работы с помощью
клавиатуры (кнопки по умолчанию, клавиши-ускорители и использование
события KeyPress).
Для того чтобы события от клавиатуры вначале обрабатывались формой, а
затем — активным компонентом, необходимо положить равным True свойство
формы KeyPreview. Если этого не сделать, то событие от клавиатуры может
быть сразу обработано активным компонентом и, таким образом, не дойдет до
формы и, соответственно, ее клавиатурного обработчика.
Если в клавиатурном обработчике установить значение e.Handled равным
true, то текущее событие от клавиатуры будет считаться обработанным и не
будет передано в другие компоненты, находящиеся "в цепочке активности".
Так, в нашем случае форма перехватывает и обрабатывает все символы, кроме
цифровых символов, запятой, минуса и \b.
Свойство CurrentCulture (типа CultureInfo, определенного в пространстве
имен
System.Globalization)
объекта
Application
позволяет
получить
информацию о региональных настройках, используемых программой, в
17
частности, о числовых форматах. По умолчанию программа использует
региональные настройки операционной системы.
Вопросы для контроля
1. Что представляет собой проект в C#? Особенности его создания и
сохранения, запуска. Какие файлы входят в состав проекта?
2. Каким образом окно свойств используется для настройки свойств
компонентов и определения обработчиков событий?
3. Перечислите некоторые форматные настройки, используемые для
форматирования и вывода данных.
4. Какая конструкция предназначена для обработки исключений? Какие
исключения существуют?
5. Каким образом происходит подключение обработчика к событию и
отключение обработчика от события?
6. Каким образом определяется подчиненность форм? Каким образом
главная форма обращается к компонентам подчиненной формы, а
подчиненная к компонентам главной?
7. Может ли один и тот же обработчик быть подключенным к нескольким
событиям?
Проекты для самостоятельной работы
1. Форма с паролем
Главная форма содержит поле ввода TextBox с заголовком-меткой
«Пароль» и кнопку Button «Открыть защищенную форму». Начальный пароль
— «qwerty». Если пароль введен правильно, то при нажатии кнопки (или
клавиши [Enter]) появляется модальная форма с заголовком «Защищенная
форма», содержащая два поля ввода с общим заголовком «Новый пароль»
(вначале эти поля содержат прежний пароль) и две модальные кнопки «OK» и
18
«Cancel». Кнопка «ОК» доступна, если оба поля ввода в модальной форме
содержат одинаковый непустой текст; при закрытии модальной формы
кнопкой «OK» или клавишей [Enter] данный текст становится новым паролем.
При закрытии модальной формы кнопкой «Cancel» или клавишей [Esc] пароль
не меняется. При вводе пароля вместо набранных символов должны
отображаться символы «*» (звездочки); для этого использовать свойство
PasswordChar компонента TextBox.
2. Синхронизированные формы
Главная форма содержит кнопку Button с заголовком «Form2», а также
панель ToolStrip с 6 кнопками быстрого доступа ToolStripButton. Кнопки
имеют заголовки «1»–«6», одна из кнопок является выделенной (вначале это
кнопка «1»). При нажатии кнопки «Form2» появляется вторая (немодальная)
форма, содержащая панель GroupBox c 6 радиокнопками. Радиокнопки имеют
подписи «1»–«6»; выбранной должна быть радиокнопка, соответствующая
нажатой кнопке быстрого доступа на главной форме. При выборе другой
радиокнопки автоматически нажимается соответствующая кнопка быстрого
доступа, и наоборот, при нажатии на кнопку быстрого доступа автоматически
выбирается соответствующая радиокнопка.
3. «Болтливая» форма
Форма содержит поле ввода TextBox и флажок CheckBox. Меню формы
содержит команду «Exit». При открытии формы она выдает сообщение «Я
начинаю работу» (сообщение содержит одну кнопку «OK»), при щелчке
мышью на флажке выдается запрос «Изменить значение флажка?» с
вариантами ответа «Да» и «Нет» (при положительном ответе значение флажка
изменяется), при щелчке на поле ввода выдается запрос «Изменить текст в
поле ввода?», содержащий поле ввода с исходным текстом и две кнопки «OK»
и «Cancel» (при нажатии «OK» в поле ввода на форме помещается текст из
поля ввода запроса). При закрытии формы или выполнении команды «Exit»
19
выдается запрос «Вы уверены?» с вариантами ответа «Да» и «Нет»; при
положительном ответе выдается сообщение «Я заканчиваю работу» (с
кнопкой «OK»), и программа завершает работу.
Использовать стандартные диалоги, вызываемые методом Show класса
MessageBox и методом InputBox класса Interaction (см. FORMS, п. 6). Работа с
флажками описана в CHKBOXES.
Литература
[2], гл. 1–6; [4], гл. 3–4; [5], гл. 12, 14; [6], гл. 11, 13; [7], гл. 7.
Модуль 2. . Работа с текстом, цветом, датой и
временем, перетаскивание
Цель обучения
Знакомство с особенностями использования текстовых полей, использование
типов даты и времени, особенности установки цвета, организация режима
перетаскивания (drag & drop) объектов.
Классы-обобщения, внедрение в приложения графических
ресурсов, работа с областью уведомлений панели задач.
Проект
CURSORS
знакомит
с
особенностями
использова-ния
в
приложении курсоров (классы Cursor и Cursors) и значков (класс Icon). Кроме
того, в нем даются начальные сведения о классах-шаблонах (generics) и о
внедрении в приложение графических ресурсов. Также рассматривается
компонент NotifyIcon, предназначенный для работы с областью уведомлений
(traybar) панели задач.
Все стандартные курсоры можно получить с помощью класса Cursors, в
котором для каждого стандартного курсора предусмотрено особое свойство,
доступное только для чтения. В классе Cursors отсутствуют средства для
20
цикли-ческого перебора стандартных курсоров, а также для получения их
имен. Поэтому в конструкторе формы мы формируем две коллекции типа
класса-обобщения List<T>: строковую коллекцию str, содержащую имена всех
стандартных курсоров, и коллекцию cur, содержащую сами эти курсоры (то
есть объекты типа Cursor) в том же порядке. При формировании коллекций
используется механизм отражения (reflection), применяемый к классу Cursors.
Механизм отражения в нашей книге подробно не рассматривается, отметим
лишь, что с его помощью определяется массив объектов типа PropertyInfo,
каждый из которых содержит информацию о каком-либо свойстве класса
Cursors, а затем в цикле foreach выполняется циклический перебор этих
объектов
и
извлечение
из
них
сведений
об
именах
и
значениях
соответствующих свойств класса Cursors.
С помощью классов-обобщений (generics), появившихся в .NET 2.0, можно
легко создавать строго типизированные коллекции, в частности, динамические
массивы
List<T>,
определенные
в
пространстве
имен
System.Collections.Generic.
Кроме
стандартных
курсоров
в
программе
можно
использовать
дополнительные курсоры. Файлы с курсорами имеют расширение cur; их
можно найти, например, в подкаталоге Cursors каталога Windows. Следует
отметить, что
анимированные курсоры
(файлы
с расширением ani)
использовать в Visual C# нельзя, а цветные курсоры при использовании в
программе отображаются в монохромном режиме. Значок любого cur-файла
соответствует изображению курсора, содержащегося в этом файле; это
позволяет быстро ознакомиться с содержимым cur-файлов, используя
приложения Проводник или Мой компьютер .
21
Работа с полями ввода. Типы, предназначенные для
работы с цветом.
1. Проект TEXTBOXES демонстрирует особенности работы с полями
ввода (компонентами TextBox). Рассматриваются вопросы, связанные с
активизацией компонента (получением и потерей фокуса ввода) и порядком
обхода компонентов, а также с обработкой ошибочных данных на уровне
отдельного поля ввода и формы в целом. Описывается механизм генерации
сообщений
об
ошибках,
основанный
на
использовании
компонента
ErrorProvider.
2. Проект COLORS знакомит с классами, предназначенными для работы с
цветом
(Color,
KnownColor,
ColorTranslator),
и
с
компонентами,
обеспечивающими прокрутку данных (TrackBar, HScrollBar, VScrollBar).
Кроме того, описывается способ доступа к компонентам через клавишиускорители связанных с ними подписей, и рассматриваются варианты
привязки компонентов к границам формы (anchoring).
Обработка событий от мыши
Проект
MOUSE
манипулятором
знакомит
"мышь".
с
обработкой
Рассматривается
событий,
явление
связанных
"захва-та"
с
мыши
компонентом и проблемы, порождаемые подоб-ным захватом. Кроме того,
обсуждаются вопросы, связан-ные с отношением "родитель"–"дочерний
компонент" и с порядком расположения дочерних компонентов в форме или
другом
компоненте-контейнере
(Z-порядок),
а
также
описываются
возможности среды Visual Studio, связанные с поиском и заменой.
Режим перетаскивания
Проект ZOO знакомит с различными аспектами режима перетаскивания
Drag & Drop (запуск режима Drag & Drop и различные варианты его
завершения, действия при перетаскивании на недопустимый приемник,
22
дополнительное выделение источника и приемника и настройка вида курсора
в режиме перетаскивания). Кроме того, описывается работа с компонентом
ImageList — хранилищем изображений.
Типы данных и компонент для работы с датой и временем.
Проект CLOCK посвящен классам, связанным с датами и временем
(классы
DateTime,
TimeSpan
и
невизуальный
компонент
Timer).
Рассматриваются два варианта реализации секундомера и описываются
действия, обеспечивающие отображение часов и секундомера на панели задач
при сворачивании окна приложения.
Для работы с датами и временем в библиотеке классов .NET Framework
предусмотрена структура DateTime. Ее статическое свойство Now, доступное
только для чтения, возвращает текущую дату и время (по системным часам
компьютера). Только текущую дату (время соответствует полуночи) можно
получить с помощью статического свойства Today. Для преобразования
даты/времени
к
их
стандартным
строковым
представлениям
можно
использовать следующие методы структуры DateTime:
- ToShortDateString — дата в кратком формате d, например, 27.01.1756;
- ToLongDateString — дата в полном формате D, например, 27 января 1756
г.;
- ToShortTimeString — время в кратком формате t, например, 10:55;
- ToLongTimeString — время в полном формате T, на-пример, 10:55:15.
Метод ToString без параметров возвращает дату/время в формате G (дата в
кратком формате, время — в полном). Формат отображения даты/времени
можно явно указать в методе ToString. Например, в нашей программе можно
было бы использовать такой вариант: DateTime.Now.ToString("T"). Упомянем
еще некоторые форматы для даты/времени: g — дата и время в кратком
формате, F — дата и время в полном формате, f — дата в полном формате,
23
время — в кратком, M или m — формат "месяц, день", Y или y — формат
"месяц, год". При форматировании дат используются текущие региональные
настройки (в нашем случае — настройки для России), хотя имеется
перегруженный вариант метода ToString, в котором можно явно указать
требуемую региональную настройку. Можно также сменить региональную
настройку для приложения в целом; для этого достаточно установить новое
значение свойства Application.CurrentCulture. Например, установить для
приложения региональные настройки, соответствующие американскому
варианту
английского
языка,
можно
с
помощью
оператора
Application.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Заметим, что настройки для России имеют имя ru-RU.
Компоненты, обеспечивающие визуализацию файловой
структуры. Просмотр изображений
Проект IMGVIEW посвящен классам, обеспечивающим визуализацию
файловой структуры компьютера: DriveListBox, DirListBox и FileListBox, в
частности, описываются действия, необходимые для их размещения в окне
Toolbox. Кроме того, описываются компоненты SplitContainer и PictureBox, а
также рассматриваются вопросы, связанные со стыковкой компонентов
(docking) и с использованием реестра Windows для хранения информации о
состоянии приложения и ее последующего восстановления (классы Registry и
RegistryKey).
Вопросы для контроля
1. Что такое класс-обобщение (generics), и как с его помощью можно
создавать строго типизированные коллекции?
2. Каким образом происходит сохранение внедренных ресурсов?
3. Каким образом обеспечивается размещение значков (пиктограмм) в
области уведомлений?
24
4. Какое свойство компонента включает его в порядок обхода, и как можно
задать или изменить порядок обхода компонентов на форме?
5. Какие методы структуры Color используются для работы с цветом?
6.
Какие
свойства
и
методы
компонента
обеспечивают
режим
перетаскивания? Какие события связаны с перетаскиванием?
7. Какие типы данных предназначены для работы с датами и временем?
8. Какие компоненты используются для визуализации файловой структуры
компьютера?
9. Каким образом можно организовать работу с реестром Windows для
сохранения и восстановления информации о состоянии программы?
Проекты для самостоятельной работы
1. Перемещаемые поля ввода
Форма содержит 6 меток Label с заголовками «label1»–«label6» и 6 полей
ввода TextBox с текстом «textBox1»–«textBox6». При перетаскивании мышью
поля ввода на метку (при нажатой клавише [Ctrl]) заголовок метки меняется на
содержимое поля ввода, причем изменяется как содержимое, так и шрифт.
Перемещать поле ввода на метку можно несколько раз. Меню формы
содержит одно подменю «Commands» с командами «Font...» и «Exit». Команда
«Font...» приводит к появлению диалогового окна FontDialog, с помощью
которого настраивается шрифт активного поля ввода.
2. Перемещаемые кнопки
Форма содержит 6 кнопок Button с заголовками «button1»–«button6» и 6
пустых списков ListBox. При перетаскивании мышью кнопки на список в
указанную позицию списка добавляется заголовок этой кнопки (положение и
заголовок кнопки не меняются). Перемещать кнопку на список можно
несколько раз. Меню формы содержит одно подменю «Commands» с
25
командами «Clear» и «Exit». Команда «Clear» очищает содержимое активного
списка; если активной является кнопка, то выдается звуковой сигнал.
Особенности, связанные с перетаскиванием на компонент ListBox,
описаны в LISTBOX1, п. 4.
3. Секундомер со списком результатов
Форма содержит выпадающий список ComboBox с комментариями
(вначале в нем имеется только пустой комментарий «–»), пустой список
ListBox с меткой «Результаты», табло секундомера Label с текстом «0:0», а
также кнопку Button с заголовком «Старт», используемую для запуска
секундомера (при запуске секундомера заголовок кнопки меняется на «Стоп»).
При остановке секундомера полученный результат вместе с текущим
комментарием добавляется в конец списка «Результаты», а табло секундомера
очищается. Для добавления нового комментария достаточно ввести его в поле
списка ComboBox и нажать [Enter]. Секундомер регистрирует время с
точностью до десятых долей секунды. Меню формы содержит подменю
«Commands» с пунктами «Clear» и «Exit». Команда «Clear» приводит к
очистке списка «Результаты».
При реализации секундомера использовать системное время компьютера
(см. CLOCK, п. 2).
26
4. Тренажер клавиатуры
Форма содержит метку Label, состоящую из одного символа — строчной
русской буквы «а» и двух полей ввода TextBox (только для чтения) с
заголовками-метками
«Время»
и
«Очки».
В
верхней
части
формы
располагается панель ToolStrip с четырьмя кнопками быстрого доступа:
«Старт», «10 с», «30 с», «60 с», причем последние три образуют группу,
обязательно содержащую выделенную кнопку (вначале это «10 с»). Кроме
того, форма содержит список ListBox
с заголовком-меткой «Лучшие
результаты», в котором указываются 10 лучших результатов для выбранного
времени (упорядоченных по возрастанию длительности). При нажатии кнопки
«Старт» в строке «Время» начинается обратный отсчет времени (в десятых
долях секунды), строка «Очки» обнуляется, а символ-буква в метке
изменяется. Требуется нажать клавишу с указанной буквой. При правильном
нажатии клавиши счетчик в строке «Очки» увеличивается на 1, а буква в
метке снова изменяется. При неправильном нажатии клавиши счетчик «Очки»
уменьшается на 1. Продолжительность одного тренировочного сеанса (в
секундах)
определяется
нажатой
кнопкой
быстрого
доступа.
После
завершения тренировочного сеанса при необходимости корректируется список
«Лучшие результаты»; если полученный результат заносится в список лучших
результатов, то об этом сообщается во вспомогательном информационном
окне. Списки лучших результатов для каждого режима хранятся в файлах
«res10.dat», «res30.dat», «res60.dat» и считываются из них при смене режима и
при запуске программы.
27
Литература
[2], гл. 7–13; [4], гл. 3–4; [5], гл. 12, 14; [6], гл. 11, 13; [7], гл. 7.
Модуль 3. . Работа с графическими и
текстовыми файлами.
Цель обучения
Знакомство с основными классами, предназначенными для работы с
графическими и текстовыми файлами.
Содержание занятий
Создание, сохранение и загрузка графических файлов.
Рисование тонким пером. Рисование цветным пером.
Рисование фигур, добавление в рисунок текста.
1. Проект PNGEDIT1 является первым в серии проектов, посвященных
работе с графической подсистемой .NET — библиотекой GDI+. В этом
проекте рассматриваются основные действия с графическими файлами
(создание, сохранение и загрузка) и описываются особенности основных
графических классов: Image, Bitmap, Graphics, PictureBox. В приложении
также реализуется отслеживание текущих координат изображения, рисование
тонким пером (с использованием классов Pen и Pens) и очистка изображение.
2. Проект PNGEDIT2 продолжает серию проектов, посвященных работе с
библиотекой GDI+. В этом проекте реализуется рисование цветным пером
произвольной толщины (классы Pen и ColorDialog) и рисование прямых линий
с
возможностью
изображения
текущего
положения
рисуемой
линии
инверсным цветом (метод DrawReversibleLine класса ControlPaint).
3. Проект PNGEDIT3 продолжает серию проектов, посвященных работе с
библиотекой GDI+. В этом проекте реализуется настройка фонового цвета
(класс SolidBrush) и рисование прямоугольников и эллипсов (методами класса
28
Graphics) в обычном режиме и в режиме прозрачности, то есть без заливки
внутренности фигур фоновым цветом.
4. Проект PNGEDIT4 завершает серию проектов, посвященных работе с
библиотекой GDI+. В этом проекте реализуются следующие дополнительные
возможности: рисование квадратов и окружностей (то есть фигур с равными
измерениями), отмена последней графической операции по нажатию клавиши
<Esc>, задание цвета с помощью инструмента "пипетка", добавление в
рисунок текста (классы Font и FontDialog) и настройка стиля изображения
линии (графический выпадающий список ComboBox)
Компоненты для создания меню. Невизуальные
компоненты для открытия и сохранения файлов,
установки свойств шрифта. Реализация операций
редактирования. Создание контекстного меню.
1. Проект TXTEDIT1 является первым в серии проектов, посвященных
разработке полнофункционального текстового редактора. В этом проекте
описывается создание и настройка главного меню приложения (компонент
MenuStrip) и реализуются основные действия с текстовыми файлами
(создание, сохранение, загрузка, а также вывод запроса о сохранении
изменений, внесенных в текст). Рассматриваются особенности диалоговых
компонентов SaveFileDialog и OpenFileDialog и многострочного варианта
компонента TextBox.
2.
Проект
TXTEDIT2
продолжает
серию
проектов,
посвященных
разработке полнофункционального текстового редактора. В этом проекте
описывается создание специальных команд меню (команды-флажки и
команды-переключатели) и групп меню третьего уровня. Приводится
реализация команд для настройки различных характеристик шрифта и
29
выравнивания текста в окне редактора; рассматриваются связанные с этими
командами свойства классов Font и TextBox.
3.
Проект
TXTEDIT3
продолжает
серию
проектов,
посвященных
разработке полнофункционального текстового редактора. В этом проекте
реализуются
стандартные
команды
редактирования
текста,
которые
включаются как в главное меню (компонент MenuStrip), так и в контекстное
меню редактора (компонент ContextMenuStrip). Также рассмотрены вопросы,
связанные с использованием буфера обмена Windows в .NET-приложениях
(класс Clipboard).
Создание панели инструментов с кнопками быстрого
доступа, изображения в пунктах меню. Форматирование
символов и абзацев.
1.
Проект
TXTEDIT4
продолжает
серию
проектов,
посвященных
разработке полнофункционального текстового редактора. В этом проекте
создается и настраивается панель инструментов приложения (компонент
ToolStrip) и ее элементы: обычные кнопки быстрого доступа, кнопки-флажки
и
кнопки-переключатели.
Описываются
действия,
необходимые
для
добавления изображений в файл ресурсов приложения и связывания
добавленных изображений с кнопками и командами меню
2.
Проект
TXTEDIT5
продолжает
серию
проектов,
посвященных
разработке полнофункционального текстового редактора. В этом проекте
создается и
настраивается
статусная
панель приложения
(компонент
StatusStrip) и ее элементы-метки. Описываются действия, обеспечивающие
проверку состояния клавиш-переключателей <Caps Lock> и <Num Lock>,
скрытие и повторное отображение панели инструментов и статусной панели, а
также вывод развернутой подсказки к выделенной команде меню на
30
статусную панель. Кроме того, описывается компонент ToolTip, позволяющий
связывать контекстную подсказку с любым визуальным компонентом
приложения
3. Проект TXTEDIT6 завершает серию проектов, посвященных разработке
полнофункционального текстового редактора. В этом проекте описываются
действия по замене компонента TextBox на компонент RichTextBox,
позволяющий по-разному форматировать различные фрагменты текста.
Рассматриваются
возможности
компонента
RichTextBox,
связанные
с
форматированием шрифта и абзаца. Кроме того, описываются средства,
позволяющие определить позицию курсора в тексте и сохранить текст в
различных форматах.
Выпадающие и обычные списки, стандартные действия
над элементами списка.
Проект
LISTBOX1
посвящен
компонентам
ComboBox
и
ListBox,
реализующим элементы управления "выпадающий список" и "список".
Рассматриваются
методы,
обеспечивающие
выполнение
стандартных
действий над элементами списка (добавление, удаление, вставка, изменение
порядка следования и т. д.), и описываются действия, позволяющие
реализовать перетаскивание элементов списка в режиме drag & drop. В
проекте также рассматриваются перечисление KnownColor и метод Beep
класса Console.
Вопросы для контроля
1.
Каким
образом
организовывается
работа
с
невизуальными
компонентами для открытия и сохранения файлов? Перечислите наиболее
часто используемые свойства этих компонентов.
31
2. Какие компоненты и классы обеспечивают работу с графическими
объектами? Перечислите наиболее распространенные графические форматы.
3. Какие типы данных и классы обеспечивают рисование тонким пером?
4. Каково назначение невизуального компонента ColorDialog?
5. Каким образом можно изменить цвет и толщину пера?
6. Какими средствами можно организовать рисование прямых линий?
7.
Какие
методы
класса
Graphics
предназначены
для
рисования
прямоугольников и эллипсов в обычном режиме и в режиме прозрачности?
8. Каким образом проектируется многоуровневое меню в визуальном
режиме?
9. Каково назначение невизуального компонента FontDialog?
10. Какими средствами обеспечивается работа с буфером обмена?
11. Какие средства используются для создания панели инструментов с
кнопками-флажками и кнопками-переключателями?
12.
Каким
образом
создается
и
настраивается
статусная
панель
приложения?
Проекты для самостоятельной работы
1. Редактор со списком файлов
Форма содержит компонент SplitContainer с вертикальной ориентацией
разделителя. На левой панели компонента SplitContainer размещается список
ListBox, на правой — многострочный компонент TextBox. При изменении
ширины формы увеличивается ширина компонента TextBox. Меню формы
содержит одно подменю «Files» с командами «Open...», «Save as...», «Close» и
«Exit». Команда «Open...» выводит диалоговое окно OpenFileDialog; с его
помощью можно выбирать не только существующие текстовые файлы, но и
создавать новые. При выборе требуемого файла его полное имя помещается в
список ListBox (становясь текущим), а его содержимое загружается в
32
компонент TextBox. В дальнейшем для загрузки данного файла в редактор
достаточно выбрать его имя в списке ListBox. При загрузке нового файла
(любым
способом)
измененный
текст
ранее
загруженного
файла
автоматически сохраняется. Команда «Save as...» позволяет сохранить
измененный текст в файле с новым именем (для указания нового имени
используется диалоговое окно SaveFileDialog). После сохранения файла под
новым именем его имя в списке ListBox также изменяется. Команда «Close»
закрывает текущий файл и удаляет его имя из списка файлов; при этом также
происходит автоматическое сохранение текста в данном файле. Если список
ListBox
является
пустым,
то
компонент
TextBox
недоступен
для
редактирования; также недоступными в этой ситуации являются команды
меню «Save as» и «Close».
При
завершении
работы
программы
содержимое
списка
файлов
сохраняется в файле «files.dat», а при последующем запуске программы
считывается из этого файла (если он существует).
Работа с компонентом SplitContainer описана в IMGVIEW, работа с
текстовыми файлами — в TXTEDIT1.
2. Прыгающие мячи
Форма фиксированного размера содержит компонент PictureBox с
изображениями пяти разноцветных кругов («мячей») разного размера. Меню
формы содержит подменю «Commands» с командами «Start», «Stop», «Faster»,
«Slower» и «Exit». При выполнении команды «Start» все мячи начинают
прямолинейное движение в случайных направлениях. При достижении
границы формы они «отскакивают» от нее. Друг с другом мячи не
взаимодействуют. Команда «Stop» останавливает движение, а команды
«Faster» и «Slower» соответственно ускоряют и замедляют движение мячей.
Команды «Stop», «Faster» и «Slower» должны быть доступны только при
движении мячей, а команда «Start» — только при их остановке. Независимо от
33
того, движутся мячи или нет, щелчок на любом мяче приводит к его удалению
с формы, а щелчок на форме приводит к появлению в указанном месте нового
мяча (размер мяча, его цвет и направление движения выбираются случайным
образом). При перерисовке изображения необходимо избавиться от эффекта
мерцания.
Для
этого
новое
изображение
следует
формировать
во
вспомогательном объекте Bitmap, а затем копировать его в свойство Image
компонента PictureBox (аналогичный прием использовался в примере
PNGEDIT4, п. 2).
3. Генератор изображений
Форма
переменного
размера
содержит
единственный
компонент
PictureBox, занимающий всю ее клиентскую область; при изменении размеров
формы
автоматически
корректируется
размер
компонента
и
размер
содержащегося в нем изображения. Меню формы содержит два подменю:
«Image» (команды «New», «Open», «Save», «Exit») и «Draw» (команды
«Start/Stop», «Image» и «Text»). Команда «New» позволяет создать новое
изображение, размер которого равен размеру клиентской области формы;
команда «Open» позволяет загрузить существующее изображение (при этом
размер формы подстраивается под размер загруженного изображения).
Команда «Save» позволяет сохранить существующее изображение. Команда
«Start/Stop» запускает/останавливает процесс автоматической генерации
элементов изображения (возможные виды элементов описываются ниже);
новый элемент добавляется к изображению каждые 0,5 с; место его
размещения и другие характеристики определяются случайным образом.
Новый элемент изображения можно также добавлять в нужную позицию с
помощью щелчка мышью на компоненте Image. Команда «Image» отображает
подменю третьего уровня, позволяющее выбрать вид изображаемого элемента
(соответствующая команда этого подменю должна быть помечена точкой —
см. TXTEDIT2, п. 2). Команда «Text» позволяет задать (например, с помощью
34
диалога InputBox) «подпись» к изображению, которая помещается в его
правом нижнем углу при сохранении изображения на диске.
Перечислим виды элементов изображения:
рисование круга случайного размера и цвета;
рисование набора концентрических кругов;
рисование последовательности кругов уменьшающегося радиуса, центры
которых расположены на одном отрезке. Для указания данного элемента
мышью требуется щелкнуть на начальной и конечной позиции нужного
отрезка.
О приемах рисования см. PNGEDIT1–PNGEDIT4.
4. Просмотр шрифтов
Форма содержит компонент NumericUpDown с заголовком-меткой «Код
символа» и панель GroupBox с меткой Label, содержащей один символ
размера 48 пунктов. При вводе в компонент NumericUpDown кодового номера
символа символ с указанным кодом отображается в метке. В начале работы
программа настроена на шрифт Wingdings (название шрифта указывается в
заголовке компонента GroupBox). Меню формы содержит одно подменю
«Commands» с командами «Font...» и «Exit». Команда «Font...» приводит к
появлению диалогового окна FontDialog, позволяющего изменить название и
стиль просматриваемого шрифта, но не его размер.
Литература
[2], гл. 14–23, 25; [4], гл. 2; [7], гл. 16.
35
Модуль 4. Компонент-таблица. Создание
компонентов во время выполнения программы
Цель обучения
Знакомство с возможностями компонента-таблицы для вывода данных
различного типа. Знакомство с особенностями создания компонентов во время
выполнения программы.
Содержание занятий
Таблица с текстовыми данными
Проект FONTVIEW посвящен приемам работы со шрифтами и их
семействами (классы Font и FontFamily, а также компонент FontDialog). В нем
описываются способы получения списка доступных шрифтов, определения
доступных стилей для указанного шрифта, установки размера шрифта с
помощью различных единиц измерения. Дается краткое описание кодировки
Unicode, и рассматриваются особенности перевода в эту кодировку
«традиционных» шрифтов, содержащих 255 символов. Также приводятся
начальные сведения по использованию компонента-таблицы DataGridView.
Таблица с графическими данными
Проект ICONVIEW посвящен приемам работы с иконками (класс Icon),
связанным с их загрузкой из файлов, отображением на экране и сохранением с
различных форматах. В проекте реализуется вспомогательный класс FileIcons,
позволяющий извлекать иконки из exe-, dll- и ico-файлов. При разработке
класса FileIcons демонстрируется возможность импортирования стандартных
функций Win32 API в .NET-приложение (механизм P/Invoke) и способы
создания
объектной
Рассматриваются
оболочки
для
дополнительные
импортированной
возможности
36
функции.
компонента-таблицы
DataGridView, связанные с отображением графических данных и изменением
размеров таблицы в ходе выполнения программы.
Приложение с заставкой, таблица тригонометрических функций.
Проект
TRIGFUNC
демонстрирует
дополнительные
возможности
компонента-таблицы DataGridView, связанные с настройкой свойств ее
столбцов. В нем также описываются приемы, связанные с обработкой
параметров командной строки, отображением на экране окна-заставки с
особыми свойствами и досрочным завершением программы. Рассматривается
метод Sleep класса Thread, метод DoEvents класса Application и компонент
ProgressBar (индикатор хода процесса).
Реализация задачи «Ханойские башни».
Программа, которая будет разработана в данном примере, представляет
собой компьютерную реализацию известной логической задачи «Ханойские
башни». Эта задача состоит в следующем: имеются три колышка, на один из
которых нанизано (в порядке уменьшения размера) несколько дисков,
образующих «башню»; требуется переместить всю башню на один из пустых
колышков, пользуясь другим пустым колышком как вспомогательным.
Переносить можно по одному диску, причем больший диск нельзя помещать
на меньший. Заметим, что для решения задачи с N дисками минимальное
число переносов равно 2N–1 (см. [2]).
В нашей программе вместо колышков будут использоваться три
прямоугольные области (компоненты GroupBox), а вместо дисков между
этими областями будут перемещаться прямоугольные блоки (компоненты
Label).
Вопросы для контроля
37
1. Каковы особенности использования компонента типа SplitContainer,
некоторые его свойства?
2. Каково назначение классов Font и FontFamily?
3. Каково назначение компонента DataGridView, его свойства и методы
доступа к ячейкам таблицы?
4. Какова необходимость использования динамической библиотеки
Shell32.dll, и какие функции из нее извлекаются?
5. Какие особенности и свойства таблицы используются для вывода в ее
ячейках значков?
6. Какие программные средства позволяют изменять свойства таблицы?
7. Каким образом можно задавать параметры командной строки на этапе
тестирования и на этапе выполнения программы?
8. Каким образом можно изменить свойства формы так, чтобы ее можно
было использовать в качестве заставки? Использование компонента типа ProgressBar для индикации хода процесса, в частности для заполнения таблицы
при большом объеме данных.
Литература
[2], гл. 28–30, 33; [4], гл. 3–4; [5], гл. 12, 14; [6], гл. 11, 13; [7], гл. 7.
Учебно-практические пособия
Основным учебно-практическим пособием по дисциплине является
пособие [2], содержащее примеры реализации Windows-приложений на
платформе .NET Framework, дополнительный теоретический материал, словарь
терминов и описание проектов для самостоятельного выполнения.
38
Программное обеспечение, необходимое
для проведения лабораторных занятий

Операционная система Microsoft Windows XP Service Pack 2 или Microsoft Windows Vista.

Платформа разработки .NET Framework (версии 2.0 или выше).

Среда программирования Microsoft Visual Studio .NET или Microsoft
Visual C# Express Edition (версии 2005 или 2008).
Технология обучения
Учебный курс состоит из 4 учебных модулей. Каждый модуль содержит
определенный набор проектов. На занятиях происходит обсуждение новых
элементов, появляющихся в предлагаемых проектах, их назначения, реализации
и применения. Затем студенты выполняют реализацию проектов. Некоторые
проекты имеют продолжение, такие проекты студенты выполняют в качестве
домашнего задания. В каждом модуле студентам предлагается выполнить
несколько проектов самостоятельно, используя приобретенные знания и
умения. Эти проекты содержат только постановку задачи и необходимый
минимум указаний.
Для получения зачета студент должен представить набор проектов,
выполненных по их описанию, а также представить набор выполненных
самостоятельно индивидуальных заданий
Рекомендуемая литература
Основная
1. Абрамян М. Э. Практикум по программированию на языках C# и
VB.NET. 2-е изд. — Ростов н/Д.: «ЦВВР», 2007.
39
2. Абрамян М. Э. Visual C# на примерах. — СПб.: БХВ–Петербург, 2008.
3. Microsoft Corporation. Разработка Windows-приложений на Microsoft
Visual Basic .NET и Microsoft Visual C# .NET. — М.: Русская редакция,
2003.
4. Нортроп Т., Уилдермьюс Ш., Райан Б. Основы разработки приложений
на платформе Microsoft .NET Framework. — М.: Русская редакция, 2007.
5. Рихтер Дж. Программирование на платформе Microsoft .NET Framework.
Мастер-класс. 3-е изд. — М.: Русская редакция, 2005.
6. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft
.NET Framework на языке C#. Мастер-класс. — М.: Русская редакция,
2007.
7. Троелсен Э. Язык программирования C# 2005 и платформа .NET 2.0.
3-е изд. — М.: Вильямс, 2007.
Дополнительная
8. Балена Ф., Димауро Дж. Современная практика программирования на
Microsoft Visual Basic и Visual C#. — М.: Русская редакция, 2006.
9. Дубовцев А. В. Microsoft .NET в подлиннике. — СПб.: БХВ-Петербург,
2004.
10.Майо Дж. C#: Искусство программирования. — СПб.: ДиаСофтЮП,
2002.
11.Петцольд Ч. Программирование для Microsoft Windows на C#. В 2-х
томах. — М.: Русская редакция, 2002.
12.Петцольд Ч. Программирование с использованием Microsoft Windows
Forms. Мастер-класс. — М.: Русская редакция, 2006.
13.Тай Т., Лэм Х. К. Платформа .NET. Основы. — СПб.: Символ-Плюс, 2003.
14.Шилдт Г. Полный справочник по C#. — М.: Вильямс, 2004.
40
1/--страниц
Пожаловаться на содержимое документа