- •1.2 Понятия приложения, проекта, решения
- •1.3 Среда разработки Visual Studio .Net
- •1.4 Создание первого проекта
- •1. 5 Компиляция и выполнение программы в среде clr
- •2.1 Основы технологии ооп
- •2.2 Состав языка
- •2.3 Типы данных
- •2.4 Переменные и константы
- •2.5 Организация ввода-вывода данных. Форматирование
- •3.1 Некоторые операции с#
- •Отрицание:
- •Условная операция.
- •3.2 Выражения и преобразование типов
- •3.3 Перечень операций
- •3.4 Математические функции языка с#
- •4.1 Операторы следования
- •4.2 Операторы ветвления
- •4.3 Операторы цикла
- •4.4 Операторы безусловного перехода
- •5.1 Методы: основные понятия
- •5.2 Перегрузка методов
- •6.1 Прямая рекурсия
- •6.2 Косвенная рекурсия
- •7.1 Оператор try
- •7.2 Операторы checked и unchecked
- •7.3 Генерация собственных исключений
- •7.4 Приемы использования обработчиков исключений
- •8.1 Одномерные массивы
- •8.2 Массив как параметр
- •8.3 Массив как объект
- •8.4 Многомерные массивы
- •8.5 Ступенчатые массивы
- •8.6 Оператор foreach и его использование при работе с массивами
- •Примеры
- •9.1 Символы char
- •9.2 Неизменяемые строки string
- •9.3 Изменяемые строки
- •Вариант 1
- •Вариант 2
- •Редактирование текста;
- •10.1 Метасимволы в регулярных выражениях
- •10.2 Поиск в тексте по шаблону
- •10.3 Редактирование текста
- •11.1 Байтовый поток
- •11.2 Символьный поток
- •11.3 Двоичные потоки
- •11.4 Перенаправление стандартных потоков
- •Практикум
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
- •12.2 Класс FileSystemInfo
- •12.3 Класс DirectoryInfo
- •12.4 Класс Directory
- •2. Реализуем метод, позволяющий получить по имени узла полное имя соответствующей папки
- •12.2 Работа с файлами
- •12.5 Класс File
- •13.1. Классы: основные понятия, данные, методы, конструкторы, свойства
- •13.2 Данные: поля и константы
- •13.3 Методы
- •Конструкторы экземпляра
- •13.4 Конструкторы класса
- •13.5 Свойства
- •13.6 Один класс - один файл
- •13.7. Классы: деструкторы, индексаторы Деструкторы
- •Индексаторы
- •13.8 Операции класса
- •14.1 Иерархия и наследование
- •Использование защищенного доступа
- •14.2 Наследование конструкторов
- •Позволяет вызвать конструктор базового класса:
- •Позволяет получить доступ к члену базового класса, который скрыт "за" членом производного класса.
- •14.3 Многоуровневая иерархия
- •14.4 Переменные базового класса и производного класса
- •14.5 Виртуальные методы
- •14.6 Абстрактные методы и классы
- •14.7 Запрет наследования
- •Самостоятельная работа
- •15.1. Пользовательские и стандартные интерфейсы
- •15.2 Стандартные интерфейсы .Net
- •15.3 Структуры
- •Задание
- •16.1. Классификация коллекций.
- •16.2 Коллекции общего назначения
- •16.3 Класс Stack
- •16.4 Класс Queue
- •16.5 Класс ArrayList
- •16.6 Класс Hashtable
- •17.1 Струткура простейшего windows-приложения
- •17.2 Элементы управления на форме
- •17.3 Обработка событий
- •17.4 Работа с элементами управления
- •17.5 Кнопки
- •17.6 Работа с элементами управления в режиме работы приложения
- •17.7 Работа со списками: ListBox, ComboBox, NumericUpDown.
- •17.8 Работа с переключателями: RadioButton, CheckBox
- •18.1 Рисование в форме
- •18.2 Работа с изображениями
17.4 Работа с элементами управления
Элементы управления — это компоненты, обеспечивающие взаимодействие между пользователем и программой. Среда Visual Studio.NET предоставляет большое количество элементов, которые можно сгруппировать по нескольким функциональным группам.
Группа командных объектов: элементы управления Button, LinkLabel, ToolBar реагируют на нажатие кнопки мыши и немедленно запускают какое-либо действие. Группа текстовых объектов: большинство приложений предоставляют возможность пользователю вводить текст и, в свою очередь, выводят различную информацию в виде текстовых записей. Элементы TextBox, RichTextBox принимают текст, а элементы Label, StatusBar выводят ее.
Группа переключателей: приложение может содержать несколько предопределенных вариантов выполнения действия или задачи; элементы управления этой группы предоставляют возможность выбора пользователю. Это одна из самых обширных групп элементов, в которую входят ComboBox, ListBox, ListView, TreeView, NumericUpDown и многие другие.
Группа контейнеров: с элементами этой группы действия приложения практически никогда не связываются, но они имеют большое значение для организации других элементов управления, их группировки и общего дизайна формы. Как правило, элементы этой группы, расположенные на форме, служат подложкой кнопкам, текстовым полям, спискам — поэтому они и называются контейнерами. Элементы Panel, GroupBox, TabControl, кроме всего прочего, разделяют возможности приложения на логические группы, обеспечивая удобство работы.
Группа графических элементов: даже самое простое приложение Windows содержит графику — иконки, заставку, встроенные изображения. Для размещения и отображения их на форме используются элементы для работы с графикой — Image List, Picture Box.
Диалоговые окна: выполняя различные операции с документом — открытие, сохранение, печать, предварительный просмотр, — мы сталкиваемся с соответствующими диалоговыми окнами. Разработчикам .NET не приходится заниматься созданием окон стандартных процедур: элементы OpenFileDialog, SaveFile Dialog, ColorDialog, PrintDialog содержат уже готовые операции.
Группа меню: многие пользователи настраивают интерфейс приложений на свой вкус: одним нравится наличие определенных панелей инструментов, другим – индивидуальное расположение окон. Но в любом приложении будет присутствовать меню, содержащее в себе доступ ко всем возможностям и настройкам приложения. Элементы MainMenu, ContextMenu представляют собой готовые формы для внесения заголовков и пунктов меню.
17.5 Кнопки
Наряду с надписями и полями редактирования текстовой информации кнопки встречаются чаще всего в пользовательском интерфейсе приложений.
Кнопки создаются на базе класса System.Windows.Forms.Button. В этом классе предусмотрено значительное количество свойств, с помощью которого можно создавать кнопки самого разного вида.

Программист может задавать внешний вид и поведение кнопки, помещать на ее поверхность графические изображения, а также задавать для кнопки фоновое графическое изображение. Шрифт текста, а также расположение текста и графического изображения можно изменять.
Текст надписи, расположенной на кнопке, задается с помощью свойства Text. Это свойство, как и другие свойства элементов управления, можно задавать во время проектирования приложения (design time), а также программно во время работы приложения (run time).
Вот, например, как программа может изменить текст надписи для кнопки buttonRed:
buttonRed.Text = "Красный";
Стандартные кнопки ОС Microsoft Windows не допускают изменение шрифта или цвета надписей.
Свойство Font задает шрифт надписи. На этапе визуального проектирования приложения можно выбрать этот шрифт из числа шрифтов, установленных в ОС, при помощи стандартного диалогового окна. Программно шрифт задается следующим образом:
buttonYellow.Font = new System.Drawing.Font("Comic Sans MS", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
Здесь мы создаем новый шрифт как объект класса System.Drawing.Font, передавая конструктору через параметры такие атрибуты шрифта, как название, размер, стиль, единицы измерения размера шрифта и кодировку.
Редактируя свойство ForeColor, можно выбрать для надписи любой цвет. Ранее мы уже рассказывали о диалоговом окне выбора цвета.
buttonYellow.ForeColor = System.Drawing.Color.DarkGreen;
Здесь мы задали темно-зеленый цвет надписи, воспользовавшись для этого статической константой System.Drawing.Color.DarkGreen.
По умолчанию текст надписи центруется внутри окна кнопки. Однако, изменяя свойство TextAlign, можно выровнять текст по правой, левой, верхней или нижней границам. Кроме этого, можно выровнять текст по углам окна кнопки.Программно выравнивание текста задается следующим образом:
buttonGreen.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
Учитывая стремление разработчиков приложений придавать своим программам интерфейс, подобный интерфейсу Web-приложений, создатели класса System.Windows.Forms.Button позаботились о возможности изменения стиля кнопки.
Стиль кнопки задается свойством FlatStyle. Это свойство может иметь следующие значения:
Flat;
Popup;
Standard;
System
Стиль Standard предназначен для создания обычных «серых» кнопок, знакомых Вам по старым приложениям Microsoft Windows. Если выбрать стиль System, то внешний вид кнопки будет определяться настройками ОС. Кнопка Popup рисуется плоской. Однако когда пользователь указывает на нее курсором мыши, кнопка принимает объемный вид. Этот стиль удобно использовать в тех случаях, когда нужно создать несколько расположенных рядом кнопок. В этом случае кнопка, над которой в настоящий момент находится курсор мыши, будет выделяться своим объемным видом. И, наконец, кнопка Flat всегда остается плоской. Но если пользователь располагает над такой кнопкой курсор мыши, кнопка становится темнее. Стиль кнопки можно определить средствами Microsoft Visual Studio .NET, а можно задать программно, например:
buttonYellow.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
Приложение может динамически во время своей работы блокировать и разблокировать кнопки и элементы управления, расположенные в формах. Для того чтобы заблокировать кнопку, установите значение свойства Enabled равным true. Заблокированная кнопка отображается в форме, однако не реагирует на мышь и клавиатуру, а также не создает событий.
При необходимости приложение может скрыть кнопку или другой элемент управления, установив значение свойства Visible равным false. Скрытый элемент управления не отображается в форме и не создает событий.
Можно значительно улучшить внешний вид кнопки, расположив на ее поверхности графическое изображение. Чтобы поместить на поверхность кнопки графическое изображение, необходимо отредактировать свойство Image. Перед этим необходимо скопировать файл изображения в каталог проекта, а затем добавить его в проект. Программно изображение на поверхности кнопки задается так:
buttonGreen.Image = ((System.Drawing.Bitmap) (resources.GetObject("buttonGreen.Image")));
Здесь изображение извлекается из ресурсов приложения с помощью метода resources.GetObject, а затем, после приведения типа к System.Drawing.Bitmap, записывается в свойство Image.
До сих пор мы рассматривали только одно событие Click, создаваемое при щелчке кнопки мышью. Однако кнопка, как и остальные элементы управления, создает множество других событий.

Все события, перечисленные на вкладке событий, разделены на группы. Группа Action (действие) включает в себя только событие Click. Что же касается группы Mouse (события, связанные с мышью), то в ней имеется целых шесть событий. Они создаются, когда пользователь нажимает кнопку мыши в окне кнопки (событие MouseDown), располагает курсор мыши над поверхностью окна кнопки (MouseEnter) или убирает курсор мыши из этого окна (MouseLeave) и т.д. Выделяя по очереди левой клавишей мыши названия событий, Вы можете прочитать в нижней части вкладки краткое описание условий, при которых это событие возникает.
На вкладке событий Вы можете назначить обработчики для любых событий.
Рассмотрим использование события buttonsEnter. Реализуем возможность, которая заключается в том, что при наведении курсора мыши на кнопку она будет менять свой цвет на красный. Для этого добавим на форму три кнопки. В класс Form1 добавим поле oldColor, предназначенное для хранения исходного цвета фона кнопки:
Color oldColor;
Добавим исходный текст обработчика событий buttonsEnter, подключенного ко всем кнопкам нашего приложения:
private void buttonsEnter(object sender, System.EventArgs e) { Button btn = (Button)sender; oldColor = btn.BackColor; btn.BackColor = Color.Red; }
Получив управление, наш обработчик событий получает идентификатор кнопки, вызвавшей событие, и сохраняет его в переменной btn. Затем обработчик сохраняет в поле oldColor текущий цвет фона кнопки, получая его из свойства btn.BackColor, а затем раскрашивает фон кнопки в красный цвет:
Button btn = (Button)sender; oldColor = btn.BackColor; btn.BackColor = Color.Red;
Когда мышь покидает окно наших кнопок, управление получает обработчик событий buttonsLeave:
private void buttonsLeave(object sender, System.EventArgs e) { Button btn = (Button)sender; btn.BackColor = oldColor; }
Его задача — восстановление исходного цвета фона кнопки, окно которой покинул курсор мыши.
Обработка событий MouseDown и MouseUp позволяет задать, например, произвольный вид кнопки в нажатом и отжатом состоянии.
