ВВЕДЕНИЕ В WINFORMS Лекция 1
Устройство Windows-приложения Оконнная функция Окно Цикл обработки сообщений OS Windows Программа создает окно и присоединяет к нему оконную функцию после чего запускает бесконечный цикл. В цикле она запрашивает Windows, нет ли для нее сообщения, и если есть, вызывает оконную функцию и передает сообщение ей. Работа программиста заключается в объявлении оконных функций. 2
Классы Form и Application Класс Form отвечает за окно и оконную функцию (свойство IntPtr Handle). Класс Application отвечает за бесконечный цикл (метод Run() ). 3
От консольного к оконному приложению 1.Добавить ссылку на сборку System.Windows.Forms 2.В метод Main вписать Form form = new Form(); Application.Run(form); 3.В окне свойств проекта выбрать опцию Windows.Application. using System.Windows.Forms; class Program { public static void Main() { Application.Run(new Form()); } 4
Настройка окна Выполняется путем задания свойств класса Form. public static void Main() { Form form = new Form() { Width = 500, Height = 300, BackColor = Color.Yellow }; Application.Run(form); } Выполняется путем наследования класса Form. class MyForm : Form { public MyForm() { } 5
Элементы управления Класс Control – предок всех элементов управления. Классы Button, TextBox, Label, … - конкретные элементы управления. class MyForm : Form { Button button; public MyForm() { Width = 500; Height = 300; button = new Button() { Parent = this, Text = "OK"}; } 6
Свойства класса Control 7 Наследуемые свойства: BackColor, ForeColor, Cursor, Font Если значения наследуемых свойств не заданы, они "наследуются" от Parent.
Свойства класса Control 8
Чем соединяются управляющие элементы Методы коллекции Controls Add(), AddRange() Вставляют в коллекцию нового потомка типа Control (или массива типов) Clear () Удаляет из коллекции все члены Count Возвращает количество членов в коллекции Remove (), RemoveAt () Удаляют элемент из коллекции Control Controls Parent 9
Окно дизайнера UI 10 Вид и поведение формы во время выполнения программы целиком определяется программным кодом на C#. Окно дизайнера – это результат компиляции и выполнения кода, сгенерированного дизайнером. Для визуальной разработки формы потребуются: 1.Окно кода. 2.Окно дизайнера. 3.Окно свойств и событий
Советы дизайнера 11 Ссылки на управляющие элементы делать полями формы. Создавать и настраивать управляющие элементы в конструкторе формы. Вставлять управляющие элементы в иерархию пользовательского интерфейса при помощи коллекции Controls. События управляющих элементов обрабатывать в методах формы.
Обработка событий 12 class MyForm : Form { Button button; public MyForm() { Width = 500; Height = 300; button = new Button(); button.Parent = this; button.Text = "Yellow"; button.Click += button_Click; } void button_Click(object sender, EventArgs e) { this.BackColor = Color.Yellow; }
События формы 13 Activated Возникает при активации формы, т.е. при получении формой фокуса ввода FormClosing, FormClosed Возникают непосредственно перед закрытием формы и сразу после закрытия Deactivate Возникает при деактивации формы, т.е. при потере фокуса ввода Load Возникает после размещения формы в памяти, но еще до отображения на экране. Применяется для окончательной настройки формы. Фокус ввода – способность у.э. получать события от клавиатуры
Шаблон событий в WinForms 14 Все события имеют типы EventHandlerXxx или EventHandler. Для возбуждения события Xxx используется защищенный метод OnXxx(T e). Если элемент наследуется, обработку события можно организовать в методе OnXxx() наследника. Перед возбуждением события всегда нужно проверять наличие подписчиков. В методе OnXxx() наследника следует вызвать метод OnXxx() предка. Событие Xxxing издается до события Xxx и позволяет заюлокировать событие при помощи свойства Cancel второго аргумента обработчика. Событие Xxxed издается после события Xxx. Пример – закрытие формы.
Пример 15 Добавить к форме событие Click3, которое происходит при каждом третьем щелчке мыши по форме.
События от мыши 16 Свойства класса MouseEventArgs Button – выдает кнопку мыши, которой был выполнен щелчок (перечисление MouseButtons) Clicks – выдает количество нажатий и отпусканий кнопки мыши Delta – выдает количество делений, которые соответствуют одному сдвигу колеса мыши Location – возвращает объект Point, содержащий координаты х и у мыши X, Y – выдает по-отдельности координаты щелчка мышью MouseDown, MouseUp, MouseMove MouseEnter, MouseHover, MouseLeave
События от клавиатуры 17 Свойства класса KeyEventArgs Alt – определяет, была ли нажата клавиша Alt Control – определяет, была ли нажата клавиша Ctrl Handled - выдает или задает значение, определяющее, было ли событие полностью обработано KeyCode – выдает код клавиши для события KeyDown или KeyUp Modifiers – определяет, какие клавиши-модификаторы (Ctrl, Shift, и/или Alt) были нажаты Shift – определяет, была ли нажата клавиша Shift KeyDown, KeyPress, KeyUp
Самостоятельно 18 1.Создать в Студии консольное приложение и вручную превратить его в оконное. 2.Сделать приложение с формой и семью кнопками, нажатие на которые окрашивает форму в различные цвета радуги. 3.Сделать приложение Калькулятор, которое имело бы поля ввода для чисел, кнопки арифметических действий и метку для вывода результата. 4.Окрашивать форму в цвета от синего к красному в зависимости от высоты расположения на форме курсора мыши. Когда курсор вверху (на севере), форма абсолютно синяя, когда внизу (на юге), абсолютно красная. 5.При помощи мыши расставлять на форме новые кнопки, нажатие на которые высвечивает в заголовке их порядковый номер, а повторное нажатие на кнопку удаляет ее с формы.