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

Import java.Awt.Event.*;

10.8. Управляющие элементы

C# и C++/CLI. Управляющие элементы составляют основу при фор-

мировании пользовательского интерфейса приложения. Библиотека NET.

Framework и пакеты языка Java включают десятки классов, используемых

для создания объектов управления, а из них - элементов управления

(controls). Элементы управления, такие как нажимаемые или селективные

кнопки, панели списков, панели редактирования и другие, широко исполь-

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

интерфейс между пользователем и приложением.

В библиотеке NET. Framework все классы управляющих элементов по-

рождаются из общего базового класса Control и поэтому позволяют однооб-

разное их использование. Имеется специальный класс ControlCollection,

обеспечивающий объединение управляющих элементов в одной коллекции.

Для связи управляющих элементов с конкретной коллекцией (т.е. объ-

ектом класса ControlCollection) используется свойство Controls управляющих

элементов, наследуемое из класса Control. Получив посредством свойства

Controls ссылку на коллекцию, можно воспользоваться его функциями

(функциями класса ControlCollection), чтобы конкретный управляющий эле-

мент добавить (Add) или удалить (Remove) из коллекции, или удалить все

элементы (Clear) из коллекции, или же выявить (Contains) наличие указанно-

го элемента в коллекции.

Из множества классов управляющих элементов библиотеки NET.

Framework мы рассмотрим классы Button и TextBox.

Из класса Button создаётся так называемая нажимаемая кнопка.

Из класса TextBox создаётся панель редактирования, которая представляет

собой простейший редактор с возможностью ввода и редактирования текста.

Java. В языке Java классы управляющих интерфейсных элементов по-

рождаются из класса Component, содержащего их общие свойства и функции.

Кнопка и панель редактирования создаются из классов Button и TextFicld.

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

ством функции add().

Рис.10.8 1 и 10.8.2 иллюстрируют наследование базовых классов клас-

сами Button, TextBox и TextField.

I +TgxtBqy | t>bTwffln;flaa&J ^

I +B"tton I fc| +ButtonBase 1 И •Control ;—Й+СдтндпвпД

1 *Oblect Й l+MarshalflvRefObiBct К]

Рис. 10.8.1. Наследование базовых классов классами TextBox и Button в C# и

C++/CLI

I +TextField~b—fcH+TextCnmnnnent I fcH+Conwonent I D>l +Qbiect 1

1 «Button j 1

Рис. 10.8.2. Наследование базовых классов классами TextFieId и Button в Java

Позднее будут рассмотрены ещё классы UserControl и Panel, используемые

для получения интересного интерфейсного элемента, представляющего в

прикладном окне полотно-окно с богатой функциональностью.

Класс Button

C# и C++/CL1. Объект класса Button представляет нажимаемую кноп-

ку. Объект создаётся конструктором:

Button ();

В классе Control библиотеки .NET Framework среди более 50 событий

объявлено событие Click:

C#.

public event EventHandler Click;

C++.NET.

public: event EventHandler^ Click;

На это событие мы будем подписывать обработчик, реагирующий на нажатие

кнопки.

При применении класса Button, кроме его собственных свойств, можно вос-

пользоваться наследуемыми свойствами класса Controi. Наследуемое свойст-

во Text, например, позволяет поместить текст в кнопку, а свойства Size и Location

- определить размеры кнопки и координаты её верхнего левого угла.

Обратите внимание, что делегатом события кнопки является делегат

EventHandler, определённый в библиотеке .NET Framework для различных

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

дочивания применения событий, упоминалось в разделе 8.5, а в примере 8.5.6

иллюстрировалось его применение.

Java. Добавление к кнопке предопределённого обработчика actionPerformedO

класса ActionListener осуществляет функция addActionListener() класса Button.

К кнопке можно применить множество свойств, наследуемых из класса

Component, например, setLocation() и getLocation() при размещении кнопки и

setSize() для установки размера.

Классы TextBox и TextField

C# и C++/CLI. Объектом класса TextBox представляется поле ввода

информации, являющееся простейшим редактором текста. Объект создаётся

конструктором:

TextBox ( );

При применении класса TextBox кроме его собственных свойств можно вос-

пользоваться наследуемыми свойствами Text для помещения и извлечения

текста, BackColor для установки и получения цвета фона, Multiline для указа-

ния многострочности, TextLength для получения длины текста и так далее. А

свойства Size и Location, как и в случае кнопки, позволяют определить раз-

меры панели редактирования и координаты её верхнего левого угла.

Java. Для размещения редактора класса TextField в области клиента окна

применяются свойства setLocation() и getLocation(), для установки размера -

setSize(). Имеется ещё много свойств, наследуемых из класса Component.

ПримерЮ.8.1. Программа с управляющими элементами на языке C#.

Приложение имеет прикладное окно с кнопкой и редактором текста. В окне

рисуется российский трехцветный флаг. Цвета флага - белый, синий и крас-

ный - применяются и при рисовании строки, введенной в редактор. Строка

рисуется при нажатии на клавишу мыши, начиная с носика курсора мыши.

Нажатие на кнопку меняет белый цвет строки циклически на синий, красный,

а затем на белый цвет..

Прикладное окно изображено нарис. 10.8.3.

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

nc#

using System;

using System.Drawing;

using System.Windows.Forms;

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

<

TextBox ourTextBox; // Редактор

Button ourButton; // Кнопка

Point point; // Начальные координаты строки

Color [] colors; // Массив цветов флага

lnt n; // Индекс массива цветов colors

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

{

Text= "Russian fiag"; // Установить заголовок прикладного окна

ourTextBox= new TextBox (); // Создать редактор

ourTextBox.Location= new Polnt (10, 120); // Установить позицию

ourTextBox.Size= new Size(150,20); //Установитьразмер

ourTextBox.Text= "Russia"; // Установить текст в редакторе

Controls.Add (ourTextBox); // Добавить редактор в форму

ourButton= new Button (); // Создать кнопку

ourButton.Location= new Point (170, 10); // Установить позицию

ourButton.Slze= new Size (40, 20); // Установить размер

ourButton.Text= "OK"; // Установить текст в кнопке

Controls.Add (ourButton); // Добавить кнопку к форме

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

ourButton.Cllck += new EventHandler (OurButtonClick);

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

MouseDown += new MouseEventHandler (OurMouseDown);

n= 0;

point= new Polnt (100, 100);

colors= new Color [3]; // Создать массив цветов

colors [0]= Color.FromArgb (255, 255, 255); // Белый цвет

colors [1]= Color.FromArgb (0, 0, 255); // Синий цвет

colors [2]= Color.FromArgb (255, 0, 0); // Красный цвет >

// Перерисовать область клиента окна

protected override void OnPalnt (PaintEventArgs arg)

{

base.OnPaint (arg);

Rectangle rect= new Rectangle (10, 10, 130, 30);

for(int i= 0; i < 3; i++) // Нарисовать флаг

{

arg.Graphlcs.FIIIRectangle // Нарисовать прямоугольник

(new SolidBrush (colors [i]), rect);

rect.Offset (0, 30); // Переместить прямоугольник вниз >

// Нарисовать строку от носика курсора мыши

arg.Graphics.DrawString (ourTextBox.Text,

new Font ("Arial", 16), new SolidBrush (colors [n]), point);

}

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

void OurMouseDown (object sender, MouseEventArgs arg)

{

point.X= arg.X; // Сохранить координату X носика курсора мыши

point.Y= arg.Y; // Сохранить координату Y носика курсора мыши

Invalidate ( ); // Перерисовать область клиента окна

>

// Обработать событие Click кнопки

vold OurButtonClick (object sender, EventArgs arg)

{

п++; // К следующему цвету флага

if (n >= 3) n= 0;

Invalidate (); // Перерисовать область клиента окна

>

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

{

Appllcation.Run (new CTextBox_Button ( )); // Выполнить

// приложение

>

>

C#. Выполнение приложения начинает функция Main(), которая вызывает

функцию Run(), передав ей в качестве аргумента объект класса CText-

Box_Button прикладного окна. Прикладное окно с изображенным флагом,

кнопкой и редактором появляется на экране.

При создании объекта класса CTextBox_Button выполняется конструк-

тор CTextBox_Button().

Вначале конструктор, используя свойство Text объекта окна, присваивает за-

головку окна название Russian flag. Затем создаются редактор текста и кноп-

ка. Свойства Location и Size редактора и кнопки размещают их в области

клиента окна и устанавливают размеры. Функция Add() включает объекты

редактора и кнопки в коллекцию прикладного окна. Если не сделать этого, то

окно не будет считать редактор и кнопку своими объектами и не отобразит

их в окне.

Теперь осуществляется подписка обработчика OurMouseDown() на событие

MouseDown мыши: создаётся объект делегата EventHandler и этот объект до-

бавляется к объекту события MouseDown. Затем на событие Click кнопки

подписывается её обработчик OurButtonClick().

Перед завершением конструктор создаёт объект point точки для фиксации

координат носика мыши, необходимых при рисовании строки функцией On-

Paint().

Наконец, создается и инициализируется массив colors цветов.

Обработчик OurMouseDown() события MouseDown мыши прост. При

каждом нажатии на клавишу мыши точке point присваиваются координаты

носика мыши и вызывается функция Invalidate(), которая инициирует выпол-

нение функции перерисовки OnPaint().

функция OnPaint() вначале изображает флаг, трижды рисуя со смеше-

нием прямоугольник rect с требуемыми цветами. Используемая при этом

функция FillRectangle() закрашивает прямоугольник кистью нужного цвета.

Затем функция DrawString() рисует строку, извлечённую из редактора с по-

мощью свойства Text.

Обработчик OurButtonClick() кнопки меняет цвет рисуемой строки, из-

менив индекс n элемента массива colors цветов и вызвав функцию Invalidate().

Функция Invalidate() инициирует перерисовку окна с объектом кисти

очередного цвета. Этот объект кисти класса SolidBrush применяет функция

DrawString() рисования строки.

номшв

Рис. 10.8.3. Прикладное окно приложения примера 10.8.1 суправляющими

элементами

Пример 10.8.2. Программа с управляющими элементами на языке Java.

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

// Java и J #

lmportjava,awt.*;