Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Современные технологии программирования: разработка Windows-приложений на языке С# В 2 т. Т.1

Покупка
Артикул: 818592.01.99
В учебнике даются основные сведения о теории и практике разработки Windows-приложений с графическим интерфейсом на языке C#. Книга состоит из двух томов. В первом томе излагаются основы Windows Forms и рассматриваются наиболее популярные элементы управления и компоненты, изучаются способы привязки элементов управления к источникам данных, достаточно подробно анализируются формы и их взаимодействие. При разработке приложений предпочтение отдается визуальной среде Visual Studio. Соответствует требованиям Федерального государственного образовательного стандарта высшего образования последнего поколения. Для студентов, имеющих практические навыки разработки консольных приложений на языке С# и продолжающих его изучение для создания приложений с графическим интерфейсом. Материал учебника может быть полезен студентам при выполнении курсовых работ и творческих домашних заданий. Может быть интересен аспирантам, научным сотрудникам и преподавателям.
Горелов, С.В. Современные технологии программирования: разработка Windows-приложений на языке С#: Учебник. В 2 т. Т. 1 / С. В. Горелов ; под науч. ред. П. Б. Лукьянова. — Москва : Прометей. 2019. — 362 c. - ISBN 978-5-907100-09-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2123771 (дата обращения: 04.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Федеральное государственное образовательное бюджетное 
учреждение высшего образования
«ФИНАНСОВЫЙ УНИВЕРСИТЕТ   
ПРИ ПРАВИТЕЛЬСТВЕ РОССИЙСКОЙ ФЕДЕРАЦИИ»

ДЕПАРТАМЕНТ АНАЛИЗА ДАННЫХ, ПРИНЯТИЯ РЕШЕНИЙ 
И ФИНАНСОВЫХ ТЕХНОЛОГИЙ

С. В. ГОРЕЛОВ

СОВРЕМЕННЫЕ ТЕХНОЛОГИИ 
ПРОГРАММИРОВАНИЯ: 
РАЗРАБОТКА WINDOWS-ПРИЛОЖЕНИЙ 
НА ЯЗЫКЕ С#

Учебник
для студентов, обучающихся по дисциплине  
«Современные технологии программирования»,  
направление «Прикладная информатика»  
(09.03.03 — для бакалавров, 09.03.04 — для магистров)

В двух томах

Том I

Под научной редакцией доктора экономических наук 
Лукьянова Павла Борисовича

Москва 2019 
УДК 004(075.8)
ББК 32.973.26-018.1
      Г68

   Автор:
Сергей Витальевич Горелов — кандидат технических наук, доцент 
Департамента анализа данных, принятия решений и финансовых 
технологий Финансового университета при Правительстве 
Российской Федерации.

Рецензенты:
Завгородний В.И. — доктор экономических наук, профессор Финансового 
университета при Правительстве Российской Федерации;

Волков А.Г. — кандидат технических наук, доцент, начальник кафедры 
Военной академии РВСН им. Петра Великого. 

Г68      Горелов С.В.
Современные технологии программирования: разра-

ботка Windows-приложений на языке С#: Учебник. В 2 т.  
Т. 1 / С.В. Горелов; под науч. ред. П.Б. Лукьянова.  — М.: 
Прометей. 2019. — 362 c.

В учебнике даются основные сведения о теории и практике разработки 
Windows-приложений с графическим интерфейсом на языке C#. Книга состоит 
из двух томов. В первом томе излагаются основы Windows Forms 
и рассматриваются наиболее популярные элементы управления и компоненты, 
изучаются способы привязки элементов управления к источникам 
данных, достаточно подробно анализируются формы и их взаимодействие. 
При разработке приложений предпочтение отдается визуальной среде 
Visual Studio.
Соответствует требованиям Федерального государственного образовательного 
стандарта высшего образования последнего поколения.
Для студентов, имеющих практические навыки разработки консольных 
приложений на языке С# и продолжающих его изучение для создания 
приложений с графическим интерфейсом. Материал учебника может 
быть полезен студентам при выполнении курсовых работ и творческих 
домашних заданий. Может быть интересен аспирантам, научным сотрудникам 
и преподавателям.

ISBN 978-5-907100-09-1
© Горелов С.В., 2019
  © Издательство «Прометей», 2019 
СОДЕРЖАНИЕ

Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
1. Взаимодействие пользователя с программой . . . . . . . . . . . . . . . . .10
   1.1. Типы программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
   1.2. Цикл обработки сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
   1.3. Компоненты окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
2. Windows-приложения и среда Visual Studio . . . . . . . . . . . . . . . . . . .16
   2.1. Среда Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
   2.2. Подробнее о делегатах и событиях . . . . . . . . . . . . . . . . . . . . . . . . .32
      Делегаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
      События  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
   2.3. Структура Windows-приложения . . . . . . . . . . . . . . . . . . . . . . . . . . .36
3. Общие сведения об элементах управления . . . . . . . . . . . . . . . . . . .45
4. Часто используемые члены класса Control . . . . . . . . . . . . . . . . . . .56
   4.1. Свойства класса Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
   4.2. Методы класса Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
   4.3. События класса Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
5. Внедрение изображения в сборку. . . . . . . . . . . . . . . . . . . . . . . . . . . .65
6. Диалоговое окно MessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
7. Программное управление интерфейсом . . . . . . . . . . . . . . . . . . . . . .71
8. Элемент управления Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
9. Элемент управления Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
10. Элемент управления TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
11. Элемент управления MaskedTextBox  . . . . . . . . . . . . . . . . . . . . . . .98
12. Группирование элементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
   12.1. Элемент управления GroupBox . . . . . . . . . . . . . . . . . . . . . . . . . .108
   12.2. Элемент управления Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
13. Флажки и переключатели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
   13.1. Элемент управления CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . 110
   13.2. Элемент управления RadioButton . . . . . . . . . . . . . . . . . . . . . . . . 113
14. Регуляторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
   14.1. Элемент управления DomainUpDown . . . . . . . . . . . . . . . . . . . . . 116
   14.2. Элемент управления NumericUpDown . . . . . . . . . . . . . . . . . . . . 119
15. Комплексный пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
16. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .126
17. Списочные элементы управления . . . . . . . . . . . . . . . . . . . . . . . . .139
   17.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
   17.2. Элемент управления ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
   17.3. Элемент управления ComboBox . . . . . . . . . . . . . . . . . . . . . . . . .159
   17.4. Элемент управления CheckedListBox . . . . . . . . . . . . . . . . . . . . .165
   17.5. Изменение объектов коллекции . . . . . . . . . . . . . . . . . . . . . . . . . .170
   17.6. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .172
18. Привязка к источнику данных . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
   18.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
   18.2. Сложная привязка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .177
      Основные сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .177
      Перерисовка элемента управления . . . . . . . . . . . . . . . . . . . . . . . . . .188
      Режим визуальной привязки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
      BindingSource как самостоятельный источник данных . . . . . . . . .193
      BindingNavigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
      Фильтрация строк источника данных . . . . . . . . . . . . . . . . . . . . . . .197
      Использование yield для формирования источника данных . . . . . .198
      Встроенные и ссылочные типы источника данных . . . . . . . . . . . .200
   18.3. Простая привязка  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
      Основные сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
      Примеры простой привязки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
      Простая привязка к сложному объекту . . . . . . . . . . . . . . . . . . . . . .209
      События класса Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
      Привязка в режиме визуальной разработки  . . . . . . . . . . . . . . . . . .214
   18.4. Комплексный пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
   18.5. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .221
19. Главное и контекстное меню  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
   19.1. Главное меню  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
   19.2. Контекстное меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
   19.3. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .233
20. Панель инструментов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
   20.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
   20.2. Практика использования компонента ToolStrip . . . . . . . . . . . . .238
   20.3. Пример использования ToolStrip . . . . . . . . . . . . . . . . . . . . . . . . .241
   20.4. Дополнительные возможности ToolStrip . . . . . . . . . . . . . . . . . .244
   20.5. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .247
21. Строка состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
22. Таймер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
   22.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
   22.2. Пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
   22.3. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .261
23. Общие сведения о формах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
   23.1. Что такое SDI- и MDI-интерфейсы . . . . . . . . . . . . . . . . . . . . . . .263
   23.2. Базовый класс Form  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
   23.3. Закрытие модального окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
   23.4. Настройка формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
      Настройка строки заголовка  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
      Изменение стиля формы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276
      Изменение состояния окна  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
      Создание окна нестандартного вида . . . . . . . . . . . . . . . . . . . . . . . .278
      Всплывающее окно . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
      Значок для формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287
      Использование клавиш Enter и Esc  . . . . . . . . . . . . . . . . . . . . . . . . . .288
      Когда первое отображаемое окно — вспомогательное . . . . . . . . .289
      Передний и задний планы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
      Расположение формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293
      Размеры формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
      Автоматическое масштабирование формы . . . . . . . . . . . . . . . . . .297
24. Взаимодействие форм приложения . . . . . . . . . . . . . . . . . . . . . . . .302
   24.1. Взаимодействие родительской и дочерней форм . . . . . . . . . . . .302
      Использование объектных членов . . . . . . . . . . . . . . . . . . . . . . . . . . .303
      Использование статических членов . . . . . . . . . . . . . . . . . . . . . . . . .306
      Использование возвращаемого значения . . . . . . . . . . . . . . . . . . . . . .310
   24.2. Управление формами в Main . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
   24.3. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .318
25. Немодальные окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320
26. Приложения с интерфейсом MDI. . . . . . . . . . . . . . . . . . . . . . . . . .326
   26.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326
   26.2. Использование меню в MDI-формах  . . . . . . . . . . . . . . . . . . . . .328
   26.3. Пример разработки  MDI-приложения . . . . . . . . . . . . . . . . . . . .328
      Создание родительской MDI-формы  . . . . . . . . . . . . . . . . . . . . . . . .328
      Создание дочерней MDI-формы. . . . . . . . . . . . . . . . . . . . . . . . . . . . .329
      Настройка родительской MDI-формы . . . . . . . . . . . . . . . . . . . . . . .331
      Особенности MDI-приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332
   26.4. Определение активной дочерней MDI-формы . . . . . . . . . . . . . .334
   26.5. Отправка данных в активную дочернюю MDI-форму  . . . . . . .335
   26.6. Упорядочение дочерних MDI-форм . . . . . . . . . . . . . . . . . . . . . .337
   26.7. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .338
27. Создание фоновых программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
   27.1. Общие сведения о компоненте NotifyIcon . . . . . . . . . . . . . . . . .339
   27.2. Пример использования компонента NotifyIcon . . . . . . . . . . . . .341
   27.3. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .345
28. Стандартные диалоговые  окна . . . . . . . . . . . . . . . . . . . . . . . . . . .346
   28.1. Общие сведения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346
   28.2. Диалоговое окно открытия файла (OpenFileDialog)  . . . . . . . . .347
   28.3. Диалоговое окно сохранения файла (SaveFileDialog)  . . . . . . .350
   28.4. Диалоговое окно выбора папки (FolderBrowserDialog)  . . . . . .352
   28.5. Диалоговое окно выбора шрифта (FontDialog)  . . . . . . . . . . . . .355
   28.6. Диалоговое окно выбора цвета (ColorDialog)  . . . . . . . . . . . . . .357
   28.7. Задания для самостоятельной работы . . . . . . . . . . . . . . . . . . . . .358
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360
ПРЕДИСЛОВИЕ

Разработка приложений с графическим интерфейсом, кроме 
написания кода, включает в себя также проектирование и разработку 
интерфейса пользователя. Под интерфейсом пользователя 
понимаются окна приложения, их элементы управления и организация 
взаимодействия с пользователем. Качество интерфейса, 
его эргономика, художественное оформление и т.д. определяют 
качество и привлекательность приложения. Вспомним, сколько 
раз менялся интерфейс таких Интернет-ресурсов, как портал государственных 
услуг (https://www.mos.ru/) или портал Финансового 
университета (www.fa.ru). Разработчики этих порталов предпринимают 
много усилий для того, чтобы сделать свой продукт 
удобным. 
Наиболее эффективные и развитые подходы к разработке 
Windows-приложений предлагает платформа Framework .NET  и 
ее среда разработки Visual Studio. В этой платформе реализованы 
две технологии разработки интерфейса пользователя: Windows 
Forms и Windows Presentation Foundation (WPF). WPF является новой 
технологией, основанной на XML. Старая традиционная технология 
практически не требует знания языка XML, поэтому она 
проще новой. 
В данном учебнике излагаются основы разработки Windows-
приложений по технологии Windows Forms. Эта технология представлена 
типами пространства имен System.Windows.Forms, к которым 
относятся элементы управления, компоненты, диалоговые 
окна и другие типы.
Среда Visual Studio позволяет проектировать окна приложения 
в режиме визуальной разработки, при этом во многих случаях программисту 
не требуется разрабатывать код для корректировки ин-
терфейса. Программист направляет свои усилия лишь на разработку 
обработчиков событий. При этом разработчик все равно должен 
знать назначение, свойства и поведение элементов интерфейса и 
использовать наиболее подходящие элементы для решения задачи. 
Количество элементов управления и компонентов превышает 60. 
Подробно изучить их в одном учебнике не представляется возможным. 
В учебнике излагаются лишь наиболее часто используемые 
свойства и методы этих элементов, что в большинстве случаев не 
препятствует созданию приложения с развитым эргономичным интерфейсом. 
Все типовые применения элементов управления и компонентов 
проиллюстрированы примерами на языке C#.
Первый том учебника посвящен изучению принципов реализации 
событийного управления Windows. Изучаются возможности 
среды Visual Studio, и приводится пример разработки простейшего 
Windows-приложения. На основе этого примера рассматривается 
типовая структура приложения. Изучение общей функциональности 
элементов управления начинается с изучения базового классом 
Control. В первом томе учебника приводится материал, описывающий 
наиболее популярные элементы управления, на базе которых 
можно разработать большинство приложений. 
 Из числа различных технологий разработки интерфейса программы 
в первом томе рассмотрены вопросы привязки элементов 
управления к источникам данных.
Во втором томе учебника рассмотрены формы, их свойства и 
взаимодействие друг с другом. Продолжено изучение элементов 
управления, к числу которых относятся достаточно сложные элементы. 
Описаны различные сопутствующие технологии, например 
сохранение состояния программы, разработка приложений 
для глобального рынка. Достаточно большое место заняло описание 
сложного элемента управления DataGridView, предназначенного 
для табличного отображения данных.
Основным источником информации при написании данного 
учебника послужила справочная система https://msdn.microsoft.
com/ru-ru/library и опыт автора.
Учебник «Современные технологии программирования: разработка 
Windows-приложений на языке С#» разработан в соот-
ветствии с учебным планом направления 09.03.03 «Прикладная 
информатика» и требованиями Федерального государственного 
образовательного стандарта высшего образования последнего 
поколения. Учебник ориентирован на формирование профессиональных 
компетенций, связанных с использованием теоретических 
знаний и практических навыков при анализе и разработке 
программных систем с использованием объектно-ориентированного 
языка программирования и современных технологий. 
В результате освоения дисциплины студенты должны:
знать 
 y назначение и свойства элементов управления и компонентов 
пользовательского интерфейса;
 y основные способы использования элементов управления и 
компонентов пользовательского интерфейса;
 y назначение и возможности интегрированной визуальной 
среды программирования;
 y возможности современных технологий, внедряемых в профессиональные 
приложения с использованием интегрированной 
среды программирования;

уметь
 y создавать эргономичный пользовательский интерфейс приложения;
 
y использовать элементы управления и компоненты пользовательского 
интерфейса при разработке приложений;
 y использовать возможности интегрированной визуальной 
среды программирования;
 y использовать современные технологии при разработке профессиональных 
приложений; 
 y использовать средства языка программирования и визуальной 
среды для отладки программы;

владеть 
 y навыками проектирования пользовательского интерфейса с 
использованием элементов управления и компонентов;
 y навыками работы в интегрированной визуальной среде программирования 
при создании приложения;
 y навыками реализации современных технологий в разрабатываемых 
профессиональных приложениях.
1. ВЗАИМОДЕЙСТВИЕ ПОЛЬЗОВАТЕЛЯ 
С ПРОГРАММОЙ

1.1. Типы программ

Существуют два типа прикладных программ (ПП), различающихся 
способом взаимодействия с Windows и свойствами создаваемого 
окна. Это консольные приложения и приложения с графическим 
интерфейсом. Для консольных приложений операционная 
система Windows создает окно, являющееся моделью окна MS 
DOS с текстовым режимом. Консоль состоит из окна и клавиатуры. 
Манипулятор мышь не поддерживается. 
С появлением Windows основными приложениями стали приложения 
с графическим интерфейсом. Такие приложения будем 
называть Windows-приложениями. 
Консольная программа инициирует взаимодействие с пользователем 
с помощью запросов на выполнение того или иного метода. 
На рис. 1.1 показана схема взаимодействия на примере ввода 
с клавиатуры с помощью метода System.Console.ReadLine. Консольная 
программа путем выполнения методов консольного ввода 
(запросов) определяет моменты времени и последовательность 
взаимодействия программы с пользователем. 
Однако Windows-приложения работают не так. Пользователь 
сам выбирает, какой элемент управления, размещенный на окне, он 
хочет использовать. Взаимодействие программы с пользователем 
берет на себя Windows. Прикладная программа теперь не запрашивает 
с помощью функций ввод данных, вместо этого она ждет, когда 
Windows известит программу о том, что пользователь выполнил 
какое-то действие. И к этим действиям относится не только ввод 
данных, но и огромное количество других действий, например выборка 
пункта меню. Этот процесс проиллюстрирован на рис. 1.2.
Рис. 1.1. Взаимодействие консольной программы с  пользователем, 
управляемое запросами (функциями)

Рис. 1.2. Взаимодействие Windows-программы с  пользователем, 
управляемое событиями
Программа ожидает сообщения, посылаемого ей операционной 
системой Windows. Сообщение передается в программу посредством 
вызова специальной функции, которая также выполняется 
системой Windows. После получения сообщения программа, 
как правило, выполняет запрограммированные действия. Взаимодействие 
программы и операционной системы, базирующееся 
на сообщениях, определяет схему построения всех Windows-
программ.
 В Windows существует множество различных типов сообщений. 
Например, каждый раз при щелчке мыши в пределах окна 
программы ей будет направлено сообщение о нажатии кнопки 
мыши. 
Клавиатурное сообщение приходит, если нажата клавиша на 
клавиатуре в то время, когда окно программы имеет фокус ввода 
(т.е. ввод с клавиатуры направляется окну). Когда программа начинает 
работать, сообщения к ней приходят неупорядоченным образом, 
т.е. программа никогда «не знает», какое сообщение будет 
следующим. Таким образом, Windows-программы напоминают 
программы, работающие по прерываниям.

1.2. Цикл обработки сообщений

Как отмечалось ранее, Windows взаимодействует с программой, 
посылая ей сообщения. При этом существует системная очередь 
сообщений — одна на всю систему и по одной очереди на 
каждый поток. На рис. 1.3 показана схема обработки событий, реализованная 
в Windows. 
Системная очередь, накапливая и перераспределяя сообщения 
по очередям потоков, решает задачи синхронизации. Все приложения 
Windows должны запускать цикл обработки сообщений.  
В программах на языке С++ цикл реализует разработчик в функции 
WinMain. В C#-программах такой цикл создается автоматически 
с помощью метода Application.Run. Этот метод в качестве 
параметра получает ссылку на главное окно программы. Цикл обработки 
сообщений выбирает сообщения из очереди сообщений 
приложения и направляет их обратно в Windows, которая затем 
вызывает оконную функцию программы, передавая ей указанные 
сообщения в качестве параметров. В программах на языке С++ 
оконная функция чаще всего имеет имя WndProc. Описанный способ 
взаимодействия может показаться излишне сложным, однако 
одной из причин реализации такой схемы является то, что программа 
должна возвращать управление планировщику Windows 
для распределения времени центрального процессора и его оптимальной 
загрузки.

Рис. 1.3. Архитектура, управляемая событиями

В программах на языке C# перечисленные выше аспекты реализации 
событийного управления скрыты внутри генерируемого 
кода. Разработчик освобожден от реализации цикла обработки 
сообщений и их анализа — управление сразу же передается соответствующему 
обработчику событий. Все, что должен сделать 
разработчик, — это подписаться на нужное ему событие (будет 
рассмотрено ниже) и реализовать соответствующий этому событию 
обработчик. В обработчиках событий сосредотачивается основная 
функциональность Windows-приложения.

1.3. Компоненты окна

Прежде чем приступить к обсуждению специальных аспектов 
программирования для Windows, необходимо определить несколько 
важных понятий. На рис. 1.4 отображено стандартное окно.

Рис. 1.4. Элементы стандартного окна 
Windows-приложения

Все окна имеют рамку, которая определяет их границы; рамка 
используется также для изменения размеров окна. В верхнем левом 
углу окна находится значок системного меню. Щелчок мыши 
на этом значке открывает системное меню. Справа от иконки системного 
меню находится заголовок окна. В правом верхнем углу 
окна расположены кнопки минимизации, полноэкранной развертки (
полноэкранного представления) и закрытия окна. 
Рабочая область — это часть окна, в которой отображается 
интерфейс пользователя и работа программы. Построение такого 
окна с его базовой функциональностью в C#-программах осу-