Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Подключение метода обработчика событий к событию




Вы удивляетесь, почему ничего не происходит при нажатии на кнопку? Дело в том, что указанный метод вызывается только тогда, когда мы свяжем с ним событие нажатия на кнопку, указав в программе: при нажатии на кнопку необходимо перейти к определенному обработчику событий.

Когда в программе используются разные кнопки и несколько обработчиков событий, без такого уточнения не обойтись, так как компьютер должен знать, какой именно метод следует выполнять при нажатии на определенную кнопку.

Код для связывания события объекта с методом обработчика события выглядит тоже несколько странно.

using System;

using System.Windows.Forms;

class MyButtonClass: Form

{

private Button mrButton;

// Метод-конструктор

public MyButtonClass()

{

mrButton = new Button();

mrButton.Text = "Нажми меня";

// Код для связывания события объекта с методом обработчика события

mrButton.Click += new System.EventHandler(MyButtonClickEventHandler);

this.Controls.Add(mrButton);

}

// Основной метод

static void Main()

{

Application.Run(new MyButtonClass());

}

// Метод-обработчик событий

void MyButtonClickEventHandler(object sender, EventArgs e)

{

mrButton.Text = "Вы нажали меня!";

}

}

С компьютерного языка это можно перевести следующим образом:

"Путем нажатия на кнопку mrButton надо связать событие Click с методом обработчика событий, который называется MyButtonClickEventHandler ".

При нажатии на кнопку приведенная выше строка кода позволяет системе вызвать метод обработчика событий, после его выполнения надпись на кнопке меняется на "Вы нажали меня!".

Чтобы использовать этот код, остановите свою программу, добавьте в нее выделенный код и нажмите клавишу F5 для выполнения программы. Нажмите на кнопку, и надпись на ней изменится. Рабочую программу — пример события нажатия на кнопку — можно найти в папке примеров, прилагаемых к курсу (Проект Example5).

Примечание редактора. Программа работает, но можно немного улучшить ее внешний вид. Сейчас положение кнопки на форме и ее размеры установлены по умолчанию. Для изменения этих параметров добавьте в конструктор класса необходимые строчки, и снова запустите программу.

public MyButtonClass()

{

mrButton = new Button();

mrButton.Text = "Нажми меня";

mrButton.Top = 100;

mrButton.Left = 100;

mrButton.Height = 50;

mrButton.Width = 70;

 

mrButton.Click += new System.EventHandler(MyButtonClickEventHandler);

this.Controls.Add(mrButton);

}

Теперь мы попробуем описать основную структуру метода обработчика событий мыши. Вероятно, в этом случае вы захотите использовать информацию, подставляемую в параметр MouseEventArgs, хотя бы для того, чтобы выяснить, какая из кнопок мыши нажимается.

public void TheMouseIsDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

this.Text = "Нажата левая кнопка мыши";

}

Далее показано, как связать событие с методом. В переводе с компьютерного в тексте написано следующее: "Если при выполнении этой программы нажимается кнопка мыши, надо перейти к методу TheMouseIsDown ", которому известно, как следует обрабатывать события мыши:

this.MouseDown += new MouseEventHandler(TheMouseIsDown);

 

Можно внести некоторые улучшения, чтобы при запуске следующего обработчика код, содержащийся в нем, делал окно более широким или узким в зависимости от нажимаемой кнопки.

public void TheMouseWasClicked(object sender, MouseEventArgs e)

{

// При нажатии левой кнопки

if (e.Button == MouseButtons.Left)

// Расширение текущего окна

this.Width = this.Width + 100;

else if (e.Button == MouseButtons.Right)

// Сужение текущего окна

this.Width = this.Width – 100;

}

Другой обработчик событий позволяет обнаружить перемещение мыши и рисовать окружность в том месте, где находится курсор:

public void TheMouseMoved(object sender, MouseEventArgs e)

{

// Подготовка области рисования

System.Drawing.Graphics g = this.CreateGraphics();

 

// Использование красной ручки

System.Drawing.Pen redPen = new System.Drawing.Pen(System.Drawing.Color.Red, 3);

 

// Рисуем окружность как эллипс с равными осями.

// Окружность рисуется в охватывающем ее квадрате.

// Координаты X и Y левого верхнего угла квадрата

// определяются координатами текущего положения мыши.

g.DrawEllipse(redPen, e.X, e.Y, 40, 40);

 

// Очистка

g.Dispose();

}

На снимке экрана показано, как это выглядит при перемещении мыши:

 

© INTUIT.ru, 2003-2013. Все права защищены.

 

Интернет-Университет Информационных Технологий

http://www.INTUIT.ru

C# для школьников
4. Лекция: Пространства имен и почтовая служба: версия для печати и PDA Материалы данной лекции посвящены пространствам имен. Описаны пространства имен языка С# и пространства имен, которые может создавать программист.
В мире существуют сотни, а может быть, и тысячи, улиц, названных именем А.С. Пушкина. Но если на конверте указана одна из них, то как письмо находит своего получателя? Естественно, адрес состоит не только из улицы. Мы, по меньшей мере, добавляем название страны и города.   Очевидно, если мы укажем адрес на конверте:
  • улица Пушкина, 17;
  • улица Пушкина, 82,
то почта не распознает, где эта улица и где этот дом. Можно написать так:
  • улица Пушкина, 17, г. Москва;
  • улица Пушкина, 82, г. Алма-Ата
Так-то лучше, а если существуют два города с одинаковым названием? Например, город Москва есть в США! Поэтому для надежности добавим еще и название страны:
  • улица Пушкина, 17, г. Москва, Российская Федерация;
  • улица Пушкина, 82, г. Алма-Ата, Республика Казахстан.
В России адрес принято писать так:
  • Российская Федерация, г. Москва, улица Пушкина, 17;
  • Республика Казахстан, г. Алма-Ата, улица Пушкина, 82.
Теперь письмо обязательно дойдет до адресата. Например, второе письмо доставят самолетом в Республику Казахстан, из аэропорта его перевезут на почтамт города Алма-Аты, а потом почтальон пойдет на улицу Пушкина и найдет дом под номером 82. Формат (Республика Казахстан, г. Алма-Ата, ул. Пушкина) можно считать "пространством имен" для отправки писем. Пространства имен и программный код Какое же отношение все это имеет к программированию? Предположим, разработчиками корпорации Microsoft написан класс "Point", используемый для рисования фигуры в определенной точке, но и вы создали класс с именем "Point", например, для загрузки фотографии человека, указывающего на что-либо. Примечание редактора. Слово Point в английском языке многозначное и означает как "точку", так и глагол "указывать". Очевидно, что оба класса выполняют абсолютно разные действия, но и тот и другой можно назвать Point. С каким же из них будет работать программа? Безусловно, имеет смысл использовать разные имена. В среде.NET для этого можно задействовать различные "пространства имен". Например, так:
  • Microsoft.Drawing.Point
  • Anna.PictureStuff.Point
Имена классов сохранены (Point), но пространства имен перед именами класса позволяют четко видеть, в каком из них находится класс. И теперь, если мне нужно использовать класс Point из пространства Anna, я могу создать объект Point при помощи следующего метода-конструктора: Anna.PictureStuff.Point annaPoint = new Anna.PictureStuff.Point(); Для работы с классом Point от Microsoft подойдет следующий код: Microsoft.Drawing.Point microsoftPoint = new Microsoft.Drawing.Point(); Несмотря на то что оба моих объекта принадлежат классу Point, они относятся к разным классам и выполняют разные действия. Как создать пространство имен и поместить в него собственный класс Разместить собственный класс в пространстве имен очень просто. Раньше мы давали описание класса следующим образом: class Animal { ... } Теперь создайте пространство имен и внутри него опишите класс: namespace Anna { class Animal { ... } } Или, если хотите, сделайте так: namespace Anna.FunStuff { class Animal { ... } } Пространства имен могут быть вложенными друг в друга. Тогда их имена разделяются точками. В последнем примере класс Animal входит в пространство имен Anna.FunStuff. Все библиотеки классов, которые предлагают разработчики Майкрософт, а также других организаций, помещаются в пространства имен. Поэтому, прежде чем использовать код из таких библиотек, необходимо понимать, как работать с пространствами имен.
Строительный блок: Пространство имен
Для логического объединения классов одной тематики рекомендуется помещать их в одно пространство имен. Имя пространства должно иметь содержательный смысл. namespace Charles.SchoolUtilities { class Animal { } }
Экземпляр или объект приведенного выше класса можно создавать, вызывая конструктор класса. Charles.SchoolUtilities.Animal cat; cat = new Charles.SchoolUtilities.Animal();
Если нужно создать много объектов одного пространства имен, то в начале программы в предложении "using" можно указать пространство имен. Тогда компьютер сам будет находить классы в этом пространстве. // говорим компьютеру, что будем использовать //классы из этого пространства имен using Charles.SchoolUtilities; // создание объекта Animal из пространства //имен Charles.SchoolUtilities Animal cat = new Animal();



Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 319; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.