Создание компоненты, реализующей модель движущегося человека

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

аботка интерфейса и состава необходимых средств в виде свойств, событий и методов

 

Для отрисовки компоненты используем обработчик события private void ManControl_Paint (object sender, PaintEventArgs e) предоставленный в классе UserControl специально для воспроизведения изображения оконных компонент.

Для взаимодействия с пользователем используются следующие функции:

public void GetLeftArmUp() - поднять левую рукуvoid GetLeftLegUp() - поднять левую ногуvoid GetRigthLegUp() - поднять правую ногуvoid GetRightArmUp() - поднять правую рукуvoid GetLeftArmDown() - опустить левюу рукуvoid GetLeftLegDown() - опустить левую ногуvoid GetRigthLegDown() - опустить правую ногуvoid GetRightArmDown() - опустить правую руку

Свойства:

public double dAngle - задает угловую скорость вращенияColor Color - задает цвет отображаемого человека

 

 

Добавление иконки к компоненте, описания к компоненте, добавление компоненты на Палитру элементов.

Добавление иконки компоненты

Чтобы добавить иконку к компоненте, нужно:

.Сначала нужно нарисовать значок размером 16х16, палитра 16 цветов и формата BMP или ICO. Сохранить его нужно в папке, где написан наш проект.

.Так как значок должен храниться внутри *.dll компоненты, то соответствующий файл нужно добавить к проекту (меню Project/Add Existing Item).

.В свойствах файла иконки параметру Build Action нужно установить в значение Embedded Resource (Внедренный ресурс).

 

модель человек движущийся программа

4.Добавить атрибуты, указывающие как найти значок, перед объявлением класса компоненты (мы указываем тип, к которому добавляем иконку, а так же название рисунка для иконки):

[ToolboxBitmap (typeof(ManControl), Man.bmp)]partial class ManControl: UserControl // класс компоненты

Добавление описания компоненты.

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

[Description (Двжущийся человек)]partial class ManControl: UserControl // класс компоненты

Он будет виден в сплывающей подсказке, при наведении курсора на компонент в Панели компонентов.

Добавление компоненты на палитру

Чтобы наша компонента была доступна в любых оконных разрабатываемых приложениях, нужно добавить ее на Палитру компонентов. Для этого нужно выполнить следующие действия:

1.Выбрать команду Choose Items (Выбрать элементы) в контекстном меню панели Toolbox (Инструменты) в нужной группе компонент.

 

2.Появится диалоговое окно, предлагающие выбрать компоненты (*.dll), которые будут отображаться в этой группе компонент. Если мы не находим нужную нам в предложенном списке, мы можем подгрузить её самостоятельно, нажав кнопку Browse и выбрать путь к файлу .dll

 

 

3.После этого компоненты появится в списке. Выбираем ее и закрываем диалоговое окно. Компонент появится в палитре компонентов. Так же, как и картинка, и описание.

 

Текст программы Rotary.cs

using System;System. Collections. Generic;System. Linq;System. Text;System. Drawing;ManComponent

{RotateDir

{, // по часовой стрелки// против часовой стрелки

}

// класс описывающий вращающюся часть тела, относительно его центраRotary

{

// ПОЛЯpos; // начальная точка (центр вращения)angle; // уголlength; // длинаminAngle; // начальный уголmaxAngle; // конечный угол - углы задают пределы вращенияRotateDir dir; // положительное направление вращенияchild; // другая вращ. часть тела, нач, точка которой совпадает с конечной

// стачичная переменая класса - общая для всехdouble da = Math.PI / 20d; // угловая скорость вращения

// СВОЙСТВАdouble MaxAngle {get {return maxAngle;} set {maxAngle = value;}}double MinAngle {get {return minAngle;} set {minAngle = value;}}double Angle

{{return angle;}

{ // преобразуем новый угол, если он отрицательный или больше чем 360 градусовa = value;(value >= 2 * Math.PI)= value - Math.PI * 2;if (value < 0)= 2 * Math.PI + value;

// если новый угол попадает в заданый диапозон (между min и max)(IsAbleToRotate(a))

{= a;();;

}

// если угол находится радом с границей заданного диапазонаif (Math. Abs (maxAngle - value) < da)= maxAngle;if (Math. Abs (minAngle - value) < da)= minAngle;();

}

}PointF Pos {get {return pos;}}PointF EndPoint {get {return new PointF (X + (float) Math. Cos(angle) * length, Y + (float) Math. Sin(angle) * length);}}float X {get {return pos.X;} set {pos.X = value;}}float Y {get {return pos.Y;} set {pos.Y = value;}}

// стачиное свойства да переменой dastatic double dAngle {get {return da;} set {if (value >= 0 && value < Math.PI * 2) da = value;}}Initialize (float x, float y, float len, int ang, RotateDir direction)

{= new PointF((float) x, (float) y);= direction;= (double) ang/180d*Math.PI; length = len;= null;= 0; maxAngle = 2 * Math.PI;

}Rotary (float x, float y, float len, int ang, RotateDir direction, Rotary ch)

{(x, y, len, ang, direction);= ch;.dir = dir;();

}Rotary (float x, float y, float len, int ang, RotateDir direction)

{(x, y, len, ang, direction);

}Rotary (float len, int ang)

{(0, 0, len, ang, RotateDir. ClockWise);

}UpdateChild()

{(child!= null)

{.X = X + (float) Math. Cos(angle) * length;.Y = Y + (float) Math. Sin(angle) * length;

}

}void Draw (Graphics g, Color color)

{. DrawLine (new Pen (color, 5), pos, EndPoint);(child!= null). Draw (g, color);. FillEllipse (new SolidBrush(color), EndPoint.X-5f, EndPoint.Y -5f, 10,10);

}IsAbleToRotate (double a)

{lb = minAngle; // нижняя границаub = maxAngle; // (dir ==RotateDir. CounterClockWise)

{= minAngle;= maxAngle;

}(ub > lb)(a >= lb && a = 0 && a < ub))true;return false;

}void SetRange (int min, int max)

{= (double) min/180d*Math.PI;= (double) max/180d*Math.PI;

}void RotateUp() // вращать по направлению

{(dir == RotateDir. CounterClockWise)-= da;Angle += da;

}void RotateDown() // вращать против направления

{(dir == RotateDir. CounterClockWise)+= da;Angle -= da;

}

}

Man.cs

using System;System. Collections. Generic;System. Linq;System. Text;System. Drawing;ManComponent

{Head

{int r = 25;x, y;Head (int X, int Y)

{= X; y = Y;

}void Draw (Graphics g, Color color) {g. FillEllipse (new SolidBrush(color), x-r/2, y-r/2, r, r);}

}Man

{x, y, len;Color color;Rotary lArm, lElbow, rArm, rElbow, lLeg, lKnee, rLeg, rKnee;Head head;Man (int X, int Y, int length)

{ // положение человечка центр головы, длина туловища= X; y = Y; len = length;= Color. Blue;= new Rotary (30,90); // левый локоть(предплечее). SetRange (90,270);= new Rotary (x, y+length*0.2f, 30, 135, RotateDir. ClockWise, lElbow); // левая рука. SetRange (135,225);= new Rotary (35, 90);. SetRang