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

10.8.4,10.8.5 И 10.8.6, а также программа, поэтапно разрабатываемая в разде-

ле 11.

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

ладающее свойствами и функциональностью окна. Объект создаётся конст-

руктором:

UserControl ( );

При применении класса UserControl можно воспользоваться свойствами

BackColor, ClientSize, Controls, Height, Location, Size, Visible, Width и други-

ми, наследуемыми из класса Control, событиями Click, MouseDown, MouseUp

и множеством других, наследуемых из того же класса Control. Также насле-

дуются известные нам функции OnPaint() и Invalidate(), и масса других. Как

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

тить интерфейс пользователя с программой.

Java. Также как и элемент типа UserControl, управляющий элемент типа

Panel содержит сотни свойств и функций, наследуемых из базовых классов.

T3 t т TTt> TTTJ** 1 J О Г7 v U J ^ W d t < i i U ) i l U l l ^ Пf1t1i \V Л> аv ^**, i*uTtOvVr Ii JwO W^ Лt iАu rЙi ЛV IТOПt Оt } iТVrUr*Aif rgtoWf^lvI^^«UJ i a p i l i IV я ^г yА^ gлvлi *^ lС£5. тv лy /Л)

getLocation(), и функции paint() и addMouseListener().

Сравните диаграммы классов рисунков 10.3.1.1 и 10.8.6. Сравнение показы-

вает, что функциональность управляющего элемента типа UserControl и окна

типа Form схожи. Что же касается управляющего элемента типа Panel и окна

типа Frame, то здесь имеется отличие, как явствует из рисунков 10.3.1.2 и

10.8.7.

l+UserContrnl 1 fcH +ScroIIableContro71 D^j +Cnntrol I DH+Comnnnent I

I +Obiact kr] 1 +MarshalBvRefObiect k^_

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

C++/CLI

I +Panel ~1 fcH+Container [ Й *Cnmnonent I D>| *Qbiect I

Рис. 10.8.7. Наследование базовых классов классом Panel в Java

Пример 10.8.4. Программа с управляющим элементом типа UserControl

на языкс C# с рисованием в потоке.

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

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

чайными цветами и размерами, сменяющие друг друга (см. рис.10.8.8).

Рис. 10.8.8. Прикладное окно программы примера 10.8.4

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

//C#

using System;

using System.Drawlng;

using System.Threading;

using System.Windows.Forms;

// Класс управляющего элемента типа UserControl

class User: UserControl

{

Thread t; // Ссылка на поток

bool life; // Признак жизни потока

Graphics g; // Ссылка на графический объект

Random rand; // Ссылка на случайное число

// Конструктор

public User ( )

{

g= this.CreateGraphics (); // Создать граф.объект

rand= new Random (); // Создать случайное число

// Создать и запустить поток рисования

life= true; // Пусть поток живёт

t= new Thread (new ThreadStart (F)); // Создать объект

t.Start (); // Запустить поток

>

// Выполнить рабочий поток

private void F ( )

{

while(life)

{

// Нарисовать случайный эллипс в области упр.элемента

g.FillEllipse (new SolidBrush (Color.FromArgb (rand.Next(255),

rand.Next(255), rand.Next(255))),

rand.Next (this.Width),

rand.Next (thls.Height),

rand.Next (this.Width<this.Height?this.Width:this.Helght),

rand.Next (this.Width<thls.Helght?this.Width:this.Height));

// Поспать

Thread.Sleep (50);

>

>

// Класс прикладного окна

class W: Form

{

User u; // Ссылка на объект управляющего элемента

//Конструктор

_{p. u .Lu fl l:l~u ,v*ui 1/ ;\

u= new User( ); // Создать объект управляющего элемента

u.Location= new Point (50, 40);// Разместить,

u.Size =new Size (140, 130); // установить размер

u.BackColor=Color.Coral; // и фон управляющего элемента

Controls.Add (u); // Включить управляющий элемент в

// коллекцию >

// Выполнить основной поток

static void Maln ()

{

Application.Run (new WQ);

>

>

Пример 10.8.5. Программа с управляющим элементом типа UserControl

на языке C# с применением потока и функции OnPaint()

В области клиента управляющего элемента типа UserControl рабочий поток

рисует совместно с функцией Paint() эллипсы со случайными цветами и раз-

мерами. Поскольку при рисовании каждого эллипса область клиента управ-

ляющего элемента перерисовывается заново, в отличие от примера 10.8.4, в

котором текущий эллипс рисуется на предыдущих эллипсах, в примере 10.8.5

каждый рисуемый эллипс сменяет предыдущий.

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

//c#

using System;

using System.Drawing;

using System.Threading;

using System.Windows.Forms;

// Класс управляющего элемента типа UserControl

class User: UserControl

{

Thread t; // Ссылка на поток

bool life; // Признак жизни потока

Graphics g; // Ссылка на графический объект

Random rand; // Ссылка на случайное число

// Конструктор

public User ( )

{

g= this.CreateGraphics (); // Создать граф.объект

rand= new Random (); // Создать случайное число

// Создать и запустить поток рисования

llfe= true; // Пусть поток живёт

t= new Thread (new ThreadStart(F)); //Создать объект потока

t.Start(); //Запуститьпоток

>

// Выполнить рабочий поток

private void F ( )

{

while (life)

{

// Перерисовать область клиента управляющего элемента