|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Классы Application и Form
Функциональные возможности класса Form, наследуемые от класса Control
Класс Control определяет общее поведение элементов управления и самой формы, так как является их базовым классом. Он содержит множество свойств, методов и событий, позволяющих реагировать на изменение состояния мыши, клавиатуры, действия выделения и перетаскивания объектов, другие действия.
Все события дублируются защищенными ( protected ) виртуальными ( virtual ) перегружаемыми ( override ) методами (готовыми зарегистрированными обработчиками) и даже таких методов значительно больше. Каждый из этих методов снабжен префиксом On (например, OnClick(), OnPaint() и т.д.). Перегрузив такой метод в производном классе, мы получаем возможность выполнить какие-то предварительные действия перед вызовом родительской реализации обработчика события.
Все связанные с состоянием мыши события работают в паре с делегатом MouseEventHandler, способному адресоваться к любому методу, удовлетворяющему сигнатуре
void MyMouseHandler(object sender, MouseEventArgs e);
Поступающий на вход обработчика объект класса MouseEventArgs расширяет наследуемый им класс EventArgs путем добавления целого ряда членов, специально предназначенных для обработки действий мыши.
| Свойство | Описание |
|---|---|
| Button | Содержит информацию о том, какая клавиша мыши была нажата в соответствии с перечислением System.Windows.Forms.MouseButtons |
| Clicks | Возвращает число нажатий и отпусканий клавиши мыши |
| Delta | Содержит цену щелчка при вращении колеса мыши |
| X, Y | Координаты указателя мыши относительно начала координат клиента |
Обработка событий клавиатуры подобна обработке событий мыши. Все связанные с состоянием клавиатуры события работают в паре с делегатом KeyEventHandler, способному адресоваться к любому методу, удовлетворяющему сигнатуре
void MyKeyboardHandler(object sender, KeyEventArgs e);
Поступающий на вход обработчика объект класса KeyEventArgs расширяет наследуемый им класс EventArgs путем добавления целого ряда членов, специально предназначенных для обработки действий клавиатуры.
| Свойство | Описание |
|---|---|
| Alt | Содержит значение, являющееся индикатором нажатия клавиши Alt |
| Control | Содержит значение, являющееся индикатором нажатия клавиши Ctrl |
| Handled | Читает или устанавливает значение, являющееся индикатором полного завершения обработки события обработчиком |
| KeyCode | Возвращает клавишный код для событий KeyDown или KeyUp |
| Modifiers | Указывает, какие модифицирующие клавиши были нажаты ( Ctrl, Shift и/или Alt ) |
| Shift | Содержит значение, являющееся индикатором нажатия клавиши Shift |
Класс Control содержит ряд и других методов, например
- Hide() - скрывает элемент управления, присваивая свойству Visible значение false
- Show() - делает элемент управления видимым, устанавливая для его свойства Visible значение true
- Invalidate() - заставляет элемент управления обновить свое изображение, посылая событие Paint
Приведем пример приложения, в котором построим новую форму, способную обеспечить следующее
- Отвечать на события мыши
- Выполнять захват и обработку ввода с клавиатуры, реагируя на событие KeyUp
-
Добавьте к нашему решению MySolution4 новый пустой проект с именем MyEventHandler командой File/Add/New Project
-
Добавьте к проекту MyEventHandler ссылки на библиотечные сборки System.dll, System.Drawing.dll, System.Windows.Forms.dll
-
Добавьте два новых пустых файла с именем GeneralForm.cs и Program.cs
-
Установите тип сборки проекта Windows Application
-
Заполните файлы проекта следующим кодом
using System;
using System.Windows.Forms;
using System.Drawing;
namespace MyEventHandler
{
class GeneralForm : Form
{
Label lblMouseMove, lblMouseWheel, lblMouseClicks;
string lblTitleMouseMove = "Координаты мыши: ";
string lblTitleMouseWheel = "Цена щелчка поворота колеса: ";
string lblTitleMouseClicks = "Число щелчков мышью: ";
public GeneralForm()
{
// Настройка формы
this.Text = "Обработка событий Control";
this.Width = System.Convert.ToInt32(1.2 * this.Width);
Label lbl = new Label();
// Настройка меток
lbl.Location = new Point(20, 5);
lbl.AutoSize = true;
lbl.Parent = this;
lbl.Text = lblTitleMouseMove;
lblMouseMove = lbl;// Настроили объект и отдали
lbl = new Label();// Прежняя ссылка с новым адресом
lbl.Location = new Point(20, lblMouseMove.Location.Y
+ lbl.Height + 10);
lbl.AutoSize = true;
lbl.Parent = this;
lbl.Text = lblTitleMouseWheel;
lblMouseWheel = lbl;// Настроили объект и отдали
lbl = new Label();// Прежняя ссылка с новым адресом
lbl.Location = new Point(20, lblMouseWheel.Location.Y
+ lbl.Height + 10);
lbl.AutoSize = true;
lbl.Parent = this;
lbl.Text = lblTitleMouseClicks;
lblMouseClicks = lbl;// Настроили объект и отдали
lbl = null; // Больше не нужен
}
protected override void OnMouseMove(MouseEventArgs e)
{
lblMouseMove.Text = String.Format(lblTitleMouseMove
+ "x={0}; y={1}", e.X, e.Y);
base.OnMouseMove(e);
}
int countClicks = 0;
protected override void OnMouseUp(MouseEventArgs e)
{
countClicks += e.Clicks;
lblMouseClicks.Text = String.Format
(lblTitleMouseClicks + countClicks);
string title = "Событие формы";
switch (e.Button)
{
case MouseButtons.Left:
MessageBox.Show("Щелкнули
левой кнопкой", title);
break;
case MouseButtons.Right:
MessageBox.Show("Щелкнули
правой кнопкой", title);
break;
case MouseButtons.Middle:
MessageBox.Show("Щелкнули
средней кнопкой", title);
break;
}
base.OnMouseUp(e);
}
protected override void OnMouseWheel(MouseEventArgs e)
{
lblMouseWheel.Text = String.Format(lblTitleMouseWheel + e.Delta);
base.OnMouseWheel(e);
}
protected override void OnKeyUp(KeyEventArgs e)
{
MessageBox.Show("Нажата клавиша: "
+ e.KeyCode.ToString(), "Нажали клавишу");
base.OnKeyUp(e);
}
}
}
Листинг
12.5 .
Код файла GeneralForm.cs
using System;
using System.Windows.Forms;
namespace MyEventHandler
{
class EntryPoint
{
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new GeneralForm());
}
}
}
Листинг
12.6 .
Код файла Program.cs
Здесь мы воспользовались перегрузкой виртуальных методов-обработчиков событий, в которых выполнили предварительную обработку данных и вызвали обработчик родительского класса для корректного завершения обработки.
-
Установите проект MyEventHandler стартовым, выполнив на нем в панели Solution Explorer команду Set as StartUp Project контектсного меню -
Запустите проект и проверьте его работу



