Создание Windows-приложения.




Лабораторная работа №4.

 

Создание и обработка событий. Создание форм.

Создание событий и их обработка.

 

Объекты могут создавать и получать события в процессе своей работы. Используя события можно создавать управляемые приложения. В качестве примера можно упомянуть, что большинство приложений Windows целиком построено на событиях. Также, примером события может служить зажим некоторого файла на рабочем столе и последующим перетаскиванием его в другую область. Здесь вообще налицо целый набор событий. Одним словом, событие – все что угодно, что может произойти с чем-либо.

Рассмотрим принцип создания события в C#. Для начала создайте консольное приложение. Далее в нем опишем некоторый пользовательский класс (например MyClass) и в нём единственное поле (например name). Функция нашего события будет заключаться в том, чтобы уведомлять пользователя об изменении значения в поле name путём вывода сообщения на экран (к примеру такого: «Значение поля name было изменено.»), а само событие будет генерироваться в момент изменения этого поля.

Первое с чего мы начнём – описания обработчика для события MyEvent:

 

static void Handler()

{

Console.WriteLine("Значение поля name было изменено.");

}

 

Следующим шагом мы анализируем сигнатуру (передаваемые и возвращаемые параметры) данного обработчика, – видим, что он без возвращаемых и без принимаемых параметров. Забегая наперёд скажу, что вызовом данного обработчика будет заниматься делегат. Почему делегат, а не прямой вызов данной функции (обработчика)? Дело в том, что вся соль событий заключается в том, что само событие не знает ничего об обработчиках, которые будут обрабатывать событие. Поэтому и используется делегат. Мы подошли к созданию делегата. Сигнатура делегата уже известна, она всегда одинакова с обработчиком (взгляните на сигнатуру обработчика):

 

delegate void MyDel(); //описание делегата

 

Делегат описывается с помощью ключевого слова delegate, далее идёт тип возвращаемого параметра и имя делегата.

Теперь опишем пользовательский класс:

 

class MyClass

{

string name; //поле класса, которое будем изменять

 

public event MyDel MyEvent; //событие, которое объявляется с помощью ключевого слова event и указанием типа делегата

 

public MyClass(string name) //конструктор класса, в который передаётся один параметр

{

this.name = name;

}

}

 

Обратите внимание, класс имеет поле (переменную) name, изменение значения которого мы будем отслеживать с помощью события и само событие MyEvent. Событие объявляется с помощью ключевого слова event и указанием типа делегата. Далее в класс добавим некоторый метод, с помощью которого будут вноситься изменения в поле name:


public void ChangeName(string name) //метод для редактирования поля name

{

this.name = name;

if (MyEvent!= null) //генерирование события

MyEvent();

}

 

Здесь следует обратить внимание на вызов события. В условии проверяется факт подписавшихся обработчиков на данное событие. Если ни один метод не подписан в качестве обработчика на данное событие, то мы получим исключение при попытке вызова события. Поэтому, вызывая пользовательские события всегда следует выполнять проверку на null. Для подписки на событие используется оператор "+=", а снятие метода с регистрации – "-=".

Следующим шагом является создание объекта класса (т.е. экземпляра класса) MyClass, далее подпись на его событие и вызов его метода, после чего наступит событие, которое мы обработаем в методе Handler().

 

Задание:

1.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Lab4

{

delegate void MyDel();//пользовательский делегат

 

class MyClass

{

string name; //поле

public event MyDel MyEvent; //событие

public MyClass(string name) //конструктор

{

this.name = name;

}

 

public void ChangeName(string name) //метод для редактирования поля name

{

this.name = name;

if (MyEvent!= null) //(проверка, есть ли подписчики на это событие)

MyEvent(); //генерирование (вызов) события

}

}

 

class Program

{

.........

}

}

Создайте полное рабочее приложение для данной лабораторной работы, используя код выше (в классе Program опишите обработчик для события MyEvent, в функции Main создайте экземпляр класса MyClass, подпишитесь на событие MyEvent, далее вызовите метод ChangeName). Недостающий код должен находиться в классе Program.

2. Создайте ещё один обработчик для события MyEvent, который будет подсчитывать квадрат числа 9 и выводить его на экран.


Создание форм.

 

Для разработки полноценного Windows-приложения понадобится то, что в программировании для Windows называется окном, а в.NET – формой. Форма, используемая в качестве главного окна, обычно состоит из заголовка (caption bar, title bar) с именем приложения, меню (menu bar), расположенного под заголовком, и внутренней области – клиентской области (client area). Форма обычно окружается рамкой, позволяющей изменять её размеры.

Рассмотрим один из вариантов создания формы. Создайте консольное приложение. В обозревателе решений, который находится справой стороны, найдите пункт «Ссылки», выделите его. Вызвав меню правой клавишей, выберите пункт «Добавить ссылку». В появившемся окне выберите из списка «Имя компонента» пункт System.Windows.Forms и нажмите «Ok».

Далее опишите класс NewForm, который будет содержать функцию Main и обработчик для события Click. Используя класс Form, который находится в пространстве имён System.Windows.Forms создайте экземпляр класса:

 

Form MainForm = new Form();

 

Т.к. MainForm является экземпляром класса Form, то он наследует все его свойства, события и методы. Используйте свойство Text, для задания текста заголовка формы, например «Главная форма». Опишите в созданном Вами классе NewForm обработчик с названием MainForm_Click для события Click объекта MainForm:

 

static void MainForm_Click(object sender, EventArgs e)

{

MessageBox.Show("сработал обработчик для события Click.");

}

 

Используя делегат EventHandler, подпишитесь на событие Click. В конце функции Main для запуска формы используйте оператор:

 

Application.Run(MainForm);

 

Запустите приложение Ctrl+F5.

 

Создание Windows-приложения.

 

Создайте проект WindowsApplication (Файл – Создать – Проект). В появившемся окне выберите «Приложение Windows Forms».

 

Укажите путь сохранения Вашего проекта и нажмите «Ok». После этого откроется сам проект с пустой формой. Зайдите в меню «Вид» и выберите пункт «Панель элементов». Откроется панель элементов со списком элементов. Перенесите на форму две кнопки (button) и пропишите в обработчике события Click (сделать двойной клик на самой кнопке) для них программный код, который будет в заголовке формы изменять текст «Кнопка 1» и «Кнопка 2»:

 

private void button1_Click(object sender, EventArgs e)

{

this.Text = "Кнопка 1";

}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: