Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 12:

Классы Application и Form

Функциональные возможности класса Form, наследуемые от класса Control

Класс Control определяет общее поведение элементов управления и самой формы, так как является их базовым классом. Он содержит множество свойств, методов и событий, позволяющих реагировать на изменение состояния мыши, клавиатуры, действия выделения и перетаскивания объектов, другие действия.

Таблица 12.3 . Некоторые события класса Control, наследуемые классом Form
Событие Описание
Click, DoubleClick, MouseEnter, MouseLeave, MouseDown, MouseUp, MouseMove, MouseHover, MouseWheel События, генерируемые состоянием мыши
KeyDown, KeyPress, KeyUp События, генерируемые состоянием клавиатуры
DragDrop, DragEnter, DragLeave, DragOver События, связанные с перетаскиванием объектов
Paint Событие, позволяющее взаимодействовать с GDI + ( Graphics Device Interface - интерфейс графического устройства)

Все события дублируются защищенными ( protected ) виртуальными ( virtual ) перегружаемыми ( override ) методами (готовыми зарегистрированными обработчиками) и даже таких методов значительно больше. Каждый из этих методов снабжен префиксом On (например, OnClick(), OnPaint() и т.д.). Перегрузив такой метод в производном классе, мы получаем возможность выполнить какие-то предварительные действия перед вызовом родительской реализации обработчика события.

Все связанные с состоянием мыши события работают в паре с делегатом MouseEventHandler, способному адресоваться к любому методу, удовлетворяющему сигнатуре

void MyMouseHandler(object sender, MouseEventArgs e);

Поступающий на вход обработчика объект класса MouseEventArgs расширяет наследуемый им класс EventArgs путем добавления целого ряда членов, специально предназначенных для обработки действий мыши.

Таблица 12.4 . Некоторые свойства класса MouseEventArgs
Свойство Описание
Button Содержит информацию о том, какая клавиша мыши была нажата в соответствии с перечислением System.Windows.Forms.MouseButtons
Clicks Возвращает число нажатий и отпусканий клавиши мыши
Delta Содержит цену щелчка при вращении колеса мыши
X, Y Координаты указателя мыши относительно начала координат клиента

Обработка событий клавиатуры подобна обработке событий мыши. Все связанные с состоянием клавиатуры события работают в паре с делегатом KeyEventHandler, способному адресоваться к любому методу, удовлетворяющему сигнатуре

void MyKeyboardHandler(object sender, KeyEventArgs e);

Поступающий на вход обработчика объект класса KeyEventArgs расширяет наследуемый им класс EventArgs путем добавления целого ряда членов, специально предназначенных для обработки действий клавиатуры.

Таблица 12.5 . Некоторые свойства класса KeyEventArgs
Свойство Описание
Alt Содержит значение, являющееся индикатором нажатия клавиши Alt
Control Содержит значение, являющееся индикатором нажатия клавиши Ctrl
Handled Читает или устанавливает значение, являющееся индикатором полного завершения обработки события обработчиком
KeyCode Возвращает клавишный код для событий KeyDown или KeyUp
Modifiers Указывает, какие модифицирующие клавиши были нажаты ( Ctrl, Shift и/или Alt )
Shift Содержит значение, являющееся индикатором нажатия клавиши Shift

Класс Control содержит ряд и других методов, например

  • Hide() - скрывает элемент управления, присваивая свойству Visible значение false
  • Show() - делает элемент управления видимым, устанавливая для его свойства Visible значение true
  • Invalidate() - заставляет элемент управления обновить свое изображение, посылая событие Paint

Приведем пример приложения, в котором построим новую форму, способную обеспечить следующее

  1. Отвечать на события мыши
  2. Выполнять захват и обработку ввода с клавиатуры, реагируя на событие 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 контектсного меню
  • Запустите проект и проверьте его работу

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

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

 

Как активировать код?