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

Invalidate ();

Thread.Sleep (150);

>

>

// Завершить поток перерисовки

public void Finish ( )

{

life= false; thread.Join ();

>

// Обработать кнопку закрытия окна

protected override vold OnClosed (EventArgs e)

{

base.OnClosed (e);

IEnumerator inum= aL.GetEnumerator ( );

while (inum.MoveNext ())

{

Lorry lorry= (Lorry) inum.Current;

lorry.Finish ();

lorry= null; >

Finish ( );

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

protected override void OnPaint (PalntEventArgs e)

{

base.OnPaint (e);

IEnumerator inum= aL.GetEnumerator ( );

while (inum.MoveNext ( ))

{

Lorry lorry= (Lorry) inum.Current;

e.Graphics.DrawEllipse (new Pen(Color.Blue, 2),

lorry.Polnt.X - 10, lorry,Point.Y - 10, 20, 20);

if(lorry.full) //1

e.Graphics.FillEllipse (new SolidBrush (Color.Blue),

lorry.Polnt.X - 10, lorry.Polnt.Y - 10, 20, 20);

e.Graphics.DrawString (lorry.Number.ToString ( ), Font,

new SolidBrush (lorry.LeftRlght?Color.Red:Color.Green),

lorry.Point.X + 10, lorry.Polnt.Y + 10);

if(leftRight)

e.Graphlcs.FIIIRectangle (new SolidBrush (Color.Red),

240, 106, 100, 20);

else e.Graphics.FillRectangle (new SolidBrush (Color.Green),

240, 106, 100, 20);

>

>

// обработать событие склада

vold EvFromWarehouseHandler (object ob, WarehouseEventArgs arg)

{

// Изменить направление перемещения грузовиков

lf(arg.Left && !arg.Full)

leftRight= false;

if (!arg.Left && !arg.Full)

leftRight= true;

IEnumerator inum= aL.GetEnumerator ();

while (inum.MoveNext ())

{

Lorry lorry= (Lorry) inum.Current;

lorry.LeftRight= leftRight; >

// Выдать информацию о направлении перемещения и

// о складе, объект которого сгенерировал событие

Console.Write("eventevFromWarehouse leftRight=" +

leftRight);

if (arg.Left)

Console.Write("CKnafl leftWH ");

else

Console.Wrtte(" Склад rightWH ");

if (arg.Full)

Console.WriteLine(" полный");

else

Console.WriteLine(" пустой");

>

// Основная функция

static void Maln ( )

{

Application.Run (new LorryAndWarhouses ());

>

>

Класс TestLorry прикладного окна содержит объекты leftWH и rightWH

складов, объект region зоны контроля и объекты lorryl и lorry2 компонента

Lorry.

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

зоны контроля, а также два объекта компонента Lorry и запускает последние,

применив функцию Start(). Также создаётся и запускается специальный поток

thr, потоковая функция Go() которого инициирует перерисовку объектов

класса с их номерами в области клиента прикладного окна.

Обработчик WarehouseHandler() события evFromWarehouse складов меняет

значение признака leftRight направления перемещения грузовиков при обну-

лении или переполнении складов и передаёт это значение объектам lorryl и

lorry2 компонента Lorry. При этом объекты компонента Lorry начнут пере-

мещаться в противоположном направлении. На рис. 11.4.2.1 изображено

прикладное и консольное окно приложения csTestLorry.

0B -<. VA ^,^|*.|w !fi-.tb'lv'.Ml^4't>l:jy^--.'l Cll/<.^- -|nj xj

Рис. 11.4.2.1. Прикладноеиконсольноеокнапрограммы csTestLorry.

11.4.3. Третий этап. Разработка приложения csLorryAndWarehouse

Наконец, мы приступили к разработке csLorryAndWarehouse приложе-

ния, которое должно удовлетворить пожеланиям пользователя этой програм-

мы, высказанным в разделе 11.1. Прикладное окно должно включать требуе-

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

щий включить произвольное количество объектов типа Lorry и выполнить

над этими объектами необходимые операции.

Диаграмма классов приложения csLorryAndWarehouse изображена на

рис. 11.4.3.1.

*LorrvAndWarhouse

-lorry: Lorry

-leftWH:Warehouse

-rightWH: Warehouse

-region: ContrlRegion

-thread: Thread

-butRun,butStop: Button

-butAdd, butDel: Button

-listBox: ListBox

-aL: ArrayList

-leftRight: bool

-rand: Random

-life: bool

-numlorry: int

-Y: int