Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

X0.4.1. Обработка событий мыши на языке c#

Для события MouseDown, возникающего при нажатии на клавишу мы-

ши, используют делегат MouseEventHandler.

Событие определено в классе System.Windows.Forms.Control, из которого по-

рождён класс Form, следующим образом:

public event MousetventHandier MouseDown;

С событием MouseDown. можно с помощью оператора "+=" связать один или

несколько объектов делегата MouseEventHandler события с инкапсулирован-

ными в них обработчиками, допустим, обработчик OurMouseDown():

MouseDown += new MouseEventHandler(OurMouseDown);

Разумеется, формат обработчика определяется делегатом MouseEventHandler

и должен быть следующим:

Void OurMouseDown (object sender, MouseEventArgs args);

где

sender - ссылка на объект-источник события,

args - ссылка на объект типа MouseEventArgs, содержащий данные, относящие-

ся к свершившемуся событию.

Обработчик OurMouseDown() получает аргумент типа MouseEventArgs, со-

держащий данные, относящиеся к обрабатываемому событию и представлен-

ные следующими свойствами класса MouseEventArgs, специфичными для

события MouseDown:

- Button, указывающее, какая клавиша нажата;

- Clicks, указывающее, сколько раз была нажата и отпущена клавиша;

- Delta, указывающее, сколько раз было повёрнуто колёсико мыши;

- X, указывающее значение координаты x носика мыши и

- Y, указывающее значение координаты у носика мыши.

Пример 10.4.1 содержит C# программу с событием, происходящим при на-

жатии на клавишу мыши. При каждом нажатии на клавишу появляется стро-

ка на консоли.

Пример 10.4.1. Программа обработки события мыши на C#.

Приложение создаёт прикладное окно и ожидает нажатия клавиши мыши в

этом окне (точнее, в области клиента окна). При нажатии на клавишу в кон-

сольное окно выдаётся строка с координатами носика курсора мыши.

Рис. 10.4.1. При нажатии на клавишу мыши появилась очередная строка на

консоли

Ниже приводятся три варианта реализации этого приложения на языке C#.

////////////////////

// C# Вариант 1

using System;

using System.Drawing;

using System.Windows.Forms;

class MainClass : Form // Класс прикладного окна

{

// Использовать предопределённый обработчик OnMouseDown мыши

protected override void OnMouseDown (MouseEventArgs e)

{

Console.WriteLine ("Mouse: x= " + e.X + " y= " + e.Y);

}

static void Main ( ) // Главная функция

{

MainClass mC= new MainClass ( ); // Создать прикладное окно

mC.Size= new Size (400, 200);

mC.Text= "Hello";

Application.Run (mC); // Выполнить приложение >

/>*

Result:

При каждом нажатии на клавишу мыши в прикладном окне выдаётся на консоль

строка вида

Mouse: x= 10 y= 55, где x, у - координаты носика мыши

*/

////////////////////

// C# Вариант 2

using System;

using System,Windows.Forms;

public class MainClass: Form // Класс прикладного окна

// Использовать наш обработчик OurMouseDown мыши

private void OurMouseDown (object sender, MouseEventArgs e)

{

Console.WriteLine ("Mouse: x= " + e.X + " y= " + e.Y);

>

static void Maln ( ) // Главная функция

{

MainClass mC= new MainClass ( ); // Создать прикладное окно

// Подписать наш обработчик на событие MouseDown

mC.MouseDown += new MouseEventHandler

(mC.OurMouseDown);

Application.Run (mC); // Выполнить приложение >

>

////////////////////

// C# Вариант 3

using System;

using System.Windows.Forms;

public class MainClass : Form // Класс прикладного окна

<

public MainClass ( ) // Конструктор

{

// Подписать наш обработчик на событие MouseDown

MouseDown += new MouseEventHandler (OurMouseDown);

>

// Использовать наш обработчик OurMouseDown мыши

private void OurMouseDown (object sender, MouseEventArgs e)

<

Console.WriteLine ("Mouse: x= " + e.X + " y= " + e.Y);

>

static void Main ( ) // Главная функция

{

Application.Run (new MainClass ()); // Выполнить приложение

>

>

C#. В С#-программах примера 10.4.1 рассмотрены три варианта применения

обработчиков мыши.

Предопределённый обработчик protected override void OnMouseDown

(MouseEventArgs e) уже описан в базовом классе Form и в первом варианте

нашей программы он переопределяется для выдачи координат носика мыши

на консоль.

Во втором и третьем вариантах программы используется наш обработчик

OurMouseDown, формат которого соответствует делегату MouseEventHandler

события мыши. Во втором варианте программы подписка обработчика на

объект событие MouseDown мыши осуществляется в теле функции Main (), а

в третьем варианте - в теле конструктора MainClass ( ) прикладного окна.

Достоинством второго и третьего вариантов является то, что на одно событие

можно подписать много обработчиков различных объектов. В нашем случае

подписывается один обработчик объекта, являющегося самим окном, поэто-

му вариант первый предпочтителен.

В первом варианте приложения задаётся размер и заголовок приклад-

ного окна. В двух других вариантах размеры окна берутся по умолчанию, по-

этому в них отсутствует using System.Drawing, поскольку отпала необходи-

мость в использовании класса Size.

10.4.2. Обработка событий мыши на языке C++/CLI

Пример 10.4.2 иллюстрирует один из вариантов обработки события

мыши на языке C++/CLI.

Пример 10.4.2. Программа обработки события мыши на C++/CLI.

///////////////

// C++/CLI

#include "stdafx.h"

#using<System.dll>

#using<System.Windows.Forms.dll>

#uslng<System.Drawing.dll>

using namespace System;

using namespace System::Windows:;Forms;

using namespace System::Drawing;

ref class Forml : public Form

{

public:

Forml (void)

<

this->Size = Drawing::Size (300,300);

this->Text = "Forml";

thls->MouseDown += gcnew MouseEventHandler (this,

&Forml::OurMouseDown);

>

protected:

void OurMouseDown (Object^ sender, MouseEventArgs ^e)

<

Console::WriteLine ("Mouse: x= " + e->X + " y= " + e->Y);

>

};