Создание оконных приложений.ppt
- Количество слайдов: 54
Создание оконных приложений в. NET
Средства разработки GUI n Редакторы ресурсов. Механизм ресурсов приложений Microsoft Windows был разработан для того, чтобы отделить элементы пользовательского интерфейса (диалоговые окна, кнопки, списки и т. д. ) от программного кода. n MFC - библиотека классов Microsoft Foundation Classes в Microsoft Visual C++ может выступать в качестве системы визуального проектирования приложений. Механизм ресурсов приложений, библиотека классов MFC и программный интерфейс Win 32 API (Application Program Interface) позволяют придать приложению самый замысловатый внешний вид, однако это достигается использованием нетривиальных приемов программирования. n RAD - средства ускоренной разработки приложений (Rapidly Application Development)
Принципы работы приложений Windows Разновидности программ: n n n Консольные и программы с графическим интерфейсом Однопоточные и многопоточные программы Синхронное и асинхронное выполнение программ
Сообщения (События) Сообщения создают драйверы периферийных устройств ввода и вывода, таких, как клавиатура, мышь или таймер. Драйверы создают сообщения при поступлении аппаратных прерываний. Сообщения попадают в системную очередь сообщений Microsoft Windows, а далее распределяются в очереди сообщений отдельных приложений. Обнаружив сообщение, приложение с помощью специальной функции из программного интерфейса Windows (Win 32 API) распределяет его нужному программному модулю, называемому функцией окна. Фокус ввода (input focus) - это атрибут, который в любой момент времени может относиться только к одному окну. Если окно имеет фокус ввода, все сообщения распределяются сначала в очередь сообщений приложения, создавшего окно, а затем - функции окна, владеющего фокусом ввода.
Процесс обработки сообщений
Windows Forms Форма - экранный объект, обычно прямоугольной формы, который можно применять для предоставления информации пользователю и для обработки ввода информации от пользователя. Форма — это объект, который задается свойствами, определяющими их внешний вид, методами, определяющими их поведение, и событиями, определяющими их взаимодействие с пользователем.
Создание главного окна using System; using System. Windows. Forms; namespace My. Windows. App { public class Main. Window : Form { //Выполнение приложения //и идентификация главного окна static void Main(string[] args) { Application. Run(new Main. Window()); } } } Набрать в командной строке csc /target: winexe *. cs
System. Windows. Forms. Application Предоставляет статические методы и свойства для управления приложением, в том числе: n методы для запуска и остановки приложения; n методы для запуска и остановки потоков в рамках приложения; n методы для обработки сообщений Windows; n свойства для получения сведений о приложении. Методы класса Application Назначение Do. Events() Заменитель многопоточности Exit() Завершает работу приложения Run() Запускает стандартный цикл работы с сообщениями для текущего потока
Иерархия классов в System. Windows. Forms
Пространство имен System. Windows. Forms Класс Назначение Application Этот класс представляет саму суть приложения Windows Forms. При помощи методов этого класса вы можете обрабатывать сообщения Windows, запускать и прекращать работу приложения и т. п. Button. Base, Button, Check. Box, Combo. Box, Data. Grid, Group. Box, List. Box, Link. Label, Picture. Box, . . . Эти классы (а также многие аналогичные им) представляют элементы графического интерфейса Form Этот тип представляет главную форму (диалоговое окно) приложения Windows Forms Color. Dialog, File. Dialog, Font. Dialog, Print. Preview. Dialog В. NET предусмотрено множество готовых к употреблению диалоговых окон для выбора цветов, файлов, шрифтов и т. п. Menu, Main. Menu, Menu. Item, Context. Menu Эти типы предназначены для создания ниспадающих и контекстных меню Clipboard, Help, Timer, Screen, Tool. Tip, Cursors Разнообразные вспомогательные типы для организации интерактивных графических интерфейсов Status. Bar, Splitter, Tool. Bar, Scroll. Bar Дополнительные элементы управления, размещаемые на форме
Возможности класса Control Класс System. Windows. Forms. Control задает общее поведение, ожидаемое от любого GUIтипа. Базовые члены класса Control позволяют указать размер и позицию элемента управления, выполнить захват событий клавиатуры и мыши, получить и установить фокус ввода, задать и изменить видимость членов и т. д.
Свойства класса Control.
События класса Control. n События, учитывающие состояние клавиатуры: Key. Press, Key. Up, Key. Down n События, учитывающие состояние мыши: Click, Double. Click, Mouse. Enter, Mouse. Down, Mouse. Up, Mouse. Move n Событие, позволяющее взаимодействовать с GDI: Paint
Методы класса Control.
Класс Form Объект класса Form поддерживает механизмы управления, реализованные на основе обмена сообщениями Windows. Класс формы содержит объявление множества событий, для которых на основе стандартного интерфейса (сигнатуры) могут быть подключены и реализованы функции обработки событий. Этот класс можно использовать как основу для создания различных вариантов окошек: n стандартных; n инструментальных; n всплывающих; n borderless; n диалоговых.
Методы класса Form обеспечивают управление формой: События: Show. Dialog - обеспечивает представление формы как модального диалога; Load – загрузка формы Activated – активизация формы Visible. Changed – видимость формы Deactivated – деактивация формы Closing – перед закрытием формы Closed – после закрытия формы Show - показывает форму как немодальный диалог; Set. Desktop. Location позиционирует форму на поверхности Рабочего стола; Activate – активизирует форму Hide – скрывает форму Close – закрывает форму
Контейнеры Container controls – место для группировки элементов пользовательского интерфейса. Контейнер может управлять доступом к размещаемым на его поверхности элементам управления. К числу контейнеров относятся: n Form n Panel - содержащий другие элементы управления. Может быть использован для группировки множества элементов управления. n Group. Box - предполагается для размещения радиокнопок и прочих переключателей. Рисует рамочку вокруг элементов управления, группируемым по какому-либо признаку. n Tab. Control - содержит объекты Tab. Page, которые могут добавляться через свойство Controls. Каждая Tab. Page-страница подобна листку записной книжки: страница с закладкой.
Элементы управления
Создание Windows-приложений в Visual Studio
Окно проектирования формы
Окно свойств - Properties
Анализ проекта Два файла: Form 1. cs Form 1. Designer. cs
Файл Form 1. cs using System; using System. Collections. Generic; using System. Component. Model; using System. Data; using System. Drawing; using System. Linq; using System. Text; using System. Windows. Forms; namespace Windows. Forms. Application 2 { public partial class Form 1 : Form { public Form 1() { Initialize. Component(); } } }
Form 1. Designer. cs namespace Windows. Forms. Application 2 { partial class Form 1 { private System. Component. Model. IContainer components = null; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components. Dispose(); } base. Dispose(disposing); } #region Код, автоматически созданный конструктором форм Windows /// <summary> /// Обязательный метод для поддержки конструктора - не изменяйте /// содержимое данного метода при помощи редактора кода. /// </summary> private void Initialize. Component() {…} #endregion private System. Windows. Forms. Button button 1; private System. Windows. Forms. Button button 2; private System. Windows. Forms. Check. Box check. Box 1; private System. Windows. Forms. Text. Box text. Box 1; } }
Метод Initialize. Component() private void Initialize. Component() { this. button 1 = new System. Windows. Forms. Button(); this. button 2 = new System. Windows. Forms. Button(); this. text. Box 1 = new System. Windows. Forms. Text. Box(); this. Suspend. Layout(); // button 1 this. button 1. Location = new System. Drawing. Point(55, 37); this. button 1. Name = "button 1"; this. button 1. Size = new System. Drawing. Size(83, 23); this. button 1. Tab. Index = 0; this. button 1. Text = "button 1"; this. button 1. Use. Visual. Style. Back. Color = true; // button 2 this. button 2. Location = new System. Drawing. Point(256, 37); this. button 2. Name = "button 2"; this. button 2. Size = new System. Drawing. Size(75, 23); this. button 2. Tab. Index = 1; this. button 2. Text = "button 2"; this. button 2. Use. Visual. Style. Back. Color = true; // text. Box 1 this. text. Box 1. Location = new System. Drawing. Point(256, 86); this. text. Box 1. Name = "text. Box 1"; this. text. Box 1. Size = new System. Drawing. Size(75, 20); this. text. Box 1. Tab. Index = 3; // Form 1 this. Auto. Scale. Dimensions = new System. Drawing. Size. F(6 F, 13 F); this. Auto. Scale. Mode = System. Windows. Forms. Auto. Scale. Mode. Fon this. Client. Size = new System. Drawing. Size(423, 322); this. Controls. Add(this. text. Box 1); this. Controls. Add(this. check. Box 1); this. Controls. Add(this. button 2); this. Controls. Add(this. button 1); this. Name = "Form 1"; this. Text = "Form 1"; this. Resume. Layout(false); this. Perform. Layout(); }
Обработка событий в режиме проектирования public partial class Form 1 : Form { public Form 1() { Initialize. Component(); } private void button 1_Click(object sender, Event. Args e) { Message. Box. Show("Выполнен щелчок на " + ((Button)sender). Name); } } object sender – источник события System. Event. Args — это базовый класс для классов, содержащих данные о событии
Обработка событий this. button 1. Click += new System. Event. Handler(this. button 1_Click); private void button 1_Click(object sender, Event. Args e) { Message. Box. Show("Выполнен щелчок на " + ((Button)sender). Name); }
Text. Box - однострочное поле public partial class Form 1 : Form { public Form 1() { Initialize. Component(); } private void text. Box 1_Text. Changed(object sender, Event. Args e) { this. Text = this. text. Box 1. Text; } }
Класс Rich. Text. Box public partial class Form 1 : Form { public Form 1() { Initialize. Component(); Font. Family family = new Font. Family("Arial"); Font my. Font = new Font(family, 25, Font. Style. Bold | Font. Style. Italic); this. rich. Text. Box 1. Font = my. Font; } }
Radio. Button - переключатель //Обработчики событий Click private void Initialize. Component() private void radio. Button 1_Click(object sender, Event. Args e) { { this. Back. Color = Color. Red; this. group. Box 1 = new System. Windows. Forms. Group. Box(); } private void radio. Button 2_Click(object sender, Event. Args e) this. radio. Button 1 = new { System. Windows. Forms. Radio. Button(); this. Back. Color = Color. Green; this. radio. Button 2 = new } System. Windows. Forms. Radio. Button(); private void radio. Button 3_Click(object sender, Event. Args e) { this. radio. Button 3 = new System. Windows. Forms. Radio. Button(); this. Back. Color = Color. Yellow; } …………………… // group. Box 1 this. group. Box 1. Controls. Add (this. radio. Button 3); this. group. Box 1. Controls. Add (this. radio. Button 2); this. group. Box 1. Controls. Add (this. radio. Button 1); …………………… }
Класс List. Box – список Свойства List. Box
Работа с List. Box public partial class Form 1 : Form { public Form 1() { Initialize. Component(); this. list. Box 1. Items. Add("Москва"); this. list. Box 1. Items. Add("Новосибирск"); this. list. Box 1. Items. Add("Красноярск"); } private void list. Box 1_Selected. Value. Changed(object sender, Event. Args e) { this. label 1. Text = (string)this. list. Box 1. Selected. Item; } }
Класс Check. Box - флажок private void Initialize. Component() { this. check. Box 1 = new System. Windows. Forms. Check. Box(); this. button 1 = new System. Windows. Forms. Button(); // check. Box 1 описание свойств. . . this. check. Box 1. Checked. Changed += new System. Event. Handler(this. check. Box 1_Checked Changed); // button 1 описание свойств. . . ……………. } public partial class Form 1 : Form { private void check. Box 1_Checked. Changed (object sender, Event. Args e) { if (this. check. Box 1. Checked) { this. button 1. Hide(); } else { this. button 1. Show(); } }
Класс Tree. View Служит для отображения иерархических данных в древовидной структуре. // корень this. tree. View 1. Nodes. Add("НГТУ"); // первый уровень Tree. Node nstu = this. tree. View 1. Nodes[0]; nstu. Nodes. Add("АВТФ"); nstu. Nodes. Add("ФМА"); nstu. Nodes. Add("ФПМИ"); // второй уровень Tree. Node avtf = nstu. Nodes[0]; avtf. Nodes. Add("АМ-809"); avtf. Nodes. Add("АМ-810");
Класс Timer Реализует таймер, который вызывает событие через определенные пользователем интервалы времени. public partial class Form 1 : Form { long count = 0; public Form 1() { this. timer 1. Interval = 1000; this. timer 1. Enabled = false; this. label 1. Text = count. To. String(); } private void timer 1_Tick(object sender, Event. Args e) { count++; this. label 1. Text = count. To. String(); } private void check. Box 1_Checked. Changed(object sender, Event. Args e) { this. timer 1. Enabled = this. check. Box 1. Checked; } }
Работа с Color. Dialog private void Initialize. Component() { this. color. Dialog 1 = new System. Windows. Forms. Color. Dialog(); } private void Form 1_Click(object sender, Event. Args e) { Dialog. Result res = this. color. Dialog 1. Show. Dialog(); if (res == Dialog. Result. OK) { Color col = this. color. Dialog 1. Color; this. Back. Color = col; }
Группировка элементов управления. Класс Panel private void Initialize. Component() { this. panel 1 = new System. Windows. Forms. Panel(); this. button 1 = new System. Windows. Forms. Button(); this. check. Box 1 = new System. Windows. Forms. Check. Box(); this. panel 1. Suspend. Layout(); this. Suspend. Layout(); // panel 1 // this. panel 1. Controls. Add(this. check. Box 1); this. panel 1. Controls. Add(this. button 1); this. panel 1. Location = new System. Drawing. Point(12, 12); this. panel 1. Name = "panel 1"; this. panel 1. Size = new System. Drawing. Size(359, 161); this. panel 1. Tab. Index = 0; ………………………………. } Свойство Auto. Scroll позволяет указать полосы прокрутки
Класс Menu. Strip – элемент управления для создания системы меню В Menu. Strip могут содержаться: n Tool. Strip. Menu. Item – традиционный пункт меню n Tool. Strip. Combo. Box – встроенный элемент Combo. Box (комбинированное окно) n Tool. Strip. Separator – простая линия, разделяющая содержимое n Tool. Strip. Text. Box – встроенный элемент Tеxt. Box (текстовое окно)
Редактор Menu. Strip
Создание меню partial class Form 1 { private System. Windows. Forms. Menu. Strip menu. Strip 1; private System. Windows. Forms. Tool. Strip. Menu. Item File. Tool. Strip. Menu. Item; private System. Windows. Forms. Tool. Strip. Menu. Item Exit. Tool. Strip. Menu. Item; }
Создание меню private void Initialize. Component() { this. menu. Strip 1 = new System. Windows. Forms. Menu. Strip(); this. file. Tool. Strip. Menu. Item = new System. Windows. Forms. Tool. Strip. Menu. Item(); this. exit. Tool. Strip. Menu. Item = new System. Windows. Forms. Tool. Strip. Menu. Item(); this. menu. Strip 1. Suspend. Layout(); this. Suspend. Layout(); // menu. Strip 1 this. menu. Strip 1. Items. Add. Range(new System. Windows. Forms. Tool. Strip. Item[] { this. file. Tool. Strip. Menu. Item}); . . . // file. Tool. Strip. Menu. Item this. file. Tool. Strip. Menu. Item. Drop. Down. Items. Add. Rang e(new System. Windows. Forms. Tool. Strip. Item[] { this. exit. Tool. Strip. Menu. Item}); . . . // Form 1 // this. Auto. Scale. Dimensions = new System. Drawing. Size. F(6 F, 13 F); this. Auto. Scale. Mode = System. Windows. Forms. Auto. Scale. Mode. Font; this. Client. Size = new System. Drawing. Size(284, 262); this. Controls. Add(this. menu. Strip 1); this. Main. Menu. Strip = this. menu. Strip 1; this. Name = "Form 1"; this. Text = "Form 1"; this. menu. Strip 1. Resume. Layout(false); this. menu. Strip 1. Perform. Layout(); this. Resume. Layout(false); this. Perform. Layout(); }
Cвойство Shortcut. Keys Form
Добавление событий для меню private void exit. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { Application. Exit(); }
MDI приложения Is. Mdi. Container true
Создание родительской формы
Обработчики событий для элементов меню private void cascade. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { Layout. Mdi(Mdi. Layout. Cascade); } private void vertical. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { Layout. Mdi(Mdi. Layout. Tile. Vertical); } private void hori. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { Layout. Mdi(Mdi. Layout. Tile. Horizontal); } private void exit. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { Application. Exit(); }
Отображение списка дочерних окон Свойство Mdi. Window. List. Item определяет пункт меню для автоматического списка имен всех дочерних окон при соответствующем выборе меню
Создание дочерней формы private void Child. Form_Click(object sender, Event. Args e) { int r, g, b; Random ran = new Random(); r = ran. Next(0, 255); g = ran. Next(0, 255); b = ran. Next(0, 255); Color cur. Color = Color. From. Argb(r, g, b); this. Back. Color = cur. Color; this. Text = cur. Color. To. String(); }
Создание дочерних окон //Обработчик меню Create private void create. Tool. Strip. Menu. Item_Click(object sender, Event. Args e) { //Создание нового дочернего окна Child. Form new. Child = new Child. Form(); //Ссылка на родительскую форму для данного дочернего окна new. Child. Mdi. Parent = this; //Отображение новой формы new. Child. Show(); }
Пример работы
Пользовательские элементы управления
Пользовательские элементы управления - Windows Form Control Library
Пользовательские элементы управления public partial class User. Control 1 : User. Control { public User. Control 1() { Initialize. Component(); } private void button 1_Click(object sender, Event. Args e) { Random rnd = new Random(); int val = rnd. Next(100); this. label 1. Text = val. To. String(); } }
Пользовательские элементы управления Для использования компонента User. Control нужно в основном проекте добавить ссылку на проект библиотеки классов Add Reference и установить Set as Start. Up Project
Создание оконных приложений.ppt