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

Vold maln ()

<

System: :Windows::Forms::Application::Run (gcnew Forml());

}

C++/CLI. Программа на языке C++/CLI примера 10.4.2 соответствует

третьей версии обработки события мыши на языке C# примера 10.4.1.

Подписка нашего обработчика OurMouseDown() мыши на событие Mouse-

Down осуществляется в конструкторе управляемого класса Forml окна. В

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

дескрипторы и стрелки. Обратим внимание, - в соответствии с грамматикой

языка C++/CLI конструктор делегата MouseEventHandler включает два

аргумента, указывающих на объект (this), в котором находится обработчик, и

сам обработчик OurMouseDown.

Правила использования делегатов, событий и классов библиотеки

.NET Framework на языках C++/CLI и C# схожи и делают похожим

программирование на этих языках, поэтому в дальнейшем языку C++/CLI

будет уделяться меньшее внимание, чем языкам Java и C#. При

программировании на Java и C# мы намеренно применим разные библиотеки,

что облегчит в дальнейшем читателю освоение существенно различающихся

Java и .NET технологий программирования.

10.4.3. Обработка событий мыши на языке Java с использо-

ванием предопределённого обработчика mouseDown

Различные варианты обработки событий на языке Java будут рассмот-

рены в разделе 10.5. В программе же примера 10.4.3 иллюстрируется обра-

ботка события мыши на языке Java, аналогичная обработке на языке C# с

использованием предопределённой функции. Пример понятен без коммента-

риев.

Пример 10.4.3. Программа обработки события мыши на Java.

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

//Java Вариант1 (Другиевариантывпримере10.5.2)

lmportjava.awt.*;

lmportjava,awt.event.*;

class MainClass extends Frame // Класс прикладного окна

{

// Выполнить предопределённый обработчик mouseDown мыши

<pu blic boolean mouseDown (Event e, int x, int у)

System.out.println ("Mouse: x= " + x + " y= " + у);

return true;

>

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

{

MalnClass mC= new MainClass ();

mC.setSize (400, 200);

mC.setTitle ("Hello");

mC.show ( );

/>*

Result:

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

строка вида

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

* /

Java и J#. В программу варианта 1 (с другими вариантами Вы познакомитесь

вскоре) включён naKeTjava.awt, содержащий оконные библиотечные классы,

и naKeTjava.awt.event, включающий классы и интерфейсы, связанные с со-

бытиями. Функция public boolean mouseDown (Event e, int x, int у) описана в

базовом классе Frame окна. В нашей программе она переопределяется, осу-

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

Завершим рассмотрение события MouseDown, связав его со статическими

и обычными обработчиками объектов двух разных классов в примере 10.4.4.

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

щений для каждого обработчика со строкой, содержащей значения коорди-

нат носика курсора мыши и имя класса, к которому принадлежит функция-

обработчик.

10.4.4. Связь события с несколькими объектами на языке c#

Как правило, во много объектной программе событие из объектов-

источников посылается нескольким объектам-приёмникам. Самостоятельно

функционирующие объекты взаимодействуют посредством событий. В про-

грамме примера 10.4.4 событие мыши обрабатывается как в объекте источ-

нике класса MainClass, так и в объектах-приёмниках классов CObjl и CObj2.

Подписка обработчиков события этих объектов на событие источника осу-

ществляется в теле конструктора объекта источника класса MainClass. При

нажатии клавиши мыши в окне источника выдаются блоки сообщений типа

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

Пример 10.4.4. Связь события с несколькими объектами.

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

//c#

using System;

using System.Windows.Forms;

class CObjl // Класс со статической функцией обработки события MouseDown

<

static public void MouseDownObjl (object sender, MouseEventArgs e)

<

MessageBox.Show ("CObjl:x=" + (e.X).ToStrlng() +

" y=" + (e.Y).ToString());

>

ciass CObJ2 // Класс с обычной функцией обработки события MOuseDown

{

public vold MouseDownObj2 (object sender, MouseEventArgs e)

{

MessageBox.Show ("CObj2:x=" + (e.X).ToStrlng( ) +

" y=" + (e.Y).ToStrlng( ));

>

>

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

{

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

{

// Инициализация события MouseDown

this.MouseDown += new MouseEventHandler (CObJl.MouseDownObjl);

CObj2 obj2= new CObj2( );

this.MouseDown += new MouseEventHandler (obj2.MouseDownObj2);

this.MouseDown += new MouseEventHandler (OurMouseDown);

>

// Обработать событие MouseDown

private void OurMouseDown (object sender, MouseEventArgs e)

<

// Выдать блок сообщений типа MessageBox

MessageBox.Show ("CMainClass:x=" + (e.X).ToString ( ) + " y="

+ (e.Y).ToString ()); >

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

{

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

>

>

C#. Программа примера 10.4.4 иллюстрирует применение и подписку обра-

ботчиков на событие мыши статического обработчика и обычных обработчи-

ков, принадлежащих объектам различных классов. Статический обработчик

MouseDownObjl() описан в классе CObjl. Обычный обработчик OurMouse-

Down() описан в классе прикладного окна, а обычный обработчик Mouse-

DownObj2() - в классе CObj2. Следует обратить внимание на отличие в под-

писке на событие обычных и статических обработчиков. При подписке обыч-

ного обработчика в аргументе конструктора делегата указывается обработчик

через ссылку на объект, а при подписке статического обработчика в аргу-

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

Рис. 10.4.4. При нажатии на клавишу мыши появился блок сообщений оче-

редного обработчика