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

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

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

2021-01-29 48
Добавление описания компоненты. 0.00 из 5.00 0 оценок
Заказать работу

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

[Description («Двжущийся человек»)]

public partial class ManControl: UserControl // класс компоненты

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

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

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

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


 

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

 

 

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


 

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

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

using System. Drawing;

namespace ManComponent

{

enum RotateDir

{

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

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

}

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

class Rotary

{

// ПОЛЯ

PointF pos; // начальная точка (центр вращения)

double angle; // угол

float length; // длина

double minAngle; // начальный угол

double maxAngle; // конечный угол – углы задают пределы вращения

public RotateDir dir; // положительное направление вращения

Rotary child; // другая вращ. часть тела, нач, точка которой совпадает с конечной

// стачичная переменая класса – «общая» для всех

static double da = Math.PI / 20d; // угловая скорость вращения

// СВОЙСТВА

public double MaxAngle {get {return maxAngle;} set {maxAngle = value;}}

public double MinAngle {get {return minAngle;} set {minAngle = value;}}

public double Angle

{

get {return angle;}

set

{ // преобразуем новый угол, если он отрицательный или больше чем 360 градусов

double a = value;

if (value >= 2 * Math.PI)

a = value – Math.PI * 2;

else if (value < 0)

a = 2 * Math.PI + value;

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

if (IsAbleToRotate(a))

{

angle = a;

UpdateChild();

return;

}

// если угол находится радом с границей заданного диапазона

else if (Math. Abs (maxAngle – value) < da)

angle = maxAngle;

else if (Math. Abs (minAngle – value) < da)

angle = minAngle;

UpdateChild();

}

}

public PointF Pos {get {return pos;}}

public PointF EndPoint {get {return new PointF (X + (float) Math. Cos(angle) * length, Y + (float) Math. Sin(angle) * length);}}

public float X {get {return pos.X;} set {pos.X = value;}}

public float Y {get {return pos.Y;} set {pos.Y = value;}}

// стачиное свойства да переменой da

public static double dAngle {get {return da;} set {if (value >= 0 && value < Math.PI * 2) da = value;}}

void Initialize (float x, float y, float len, int ang, RotateDir direction)

{

pos = new PointF((float) x, (float) y);

dir = direction;

angle = (double) ang/180d*Math.PI; length = len;

child = null;

minAngle = 0; maxAngle = 2 * Math.PI;

}

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

{

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

child = ch;

child.dir = dir;

UpdateChild();

}

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

{

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

}

public Rotary (float len, int ang)

{

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

}

void UpdateChild()

{

if (child!= null)

{

child.X = X + (float) Math. Cos(angle) * length;

child.Y = Y + (float) Math. Sin(angle) * length;

}

}

public void Draw (Graphics g, Color color)

{

g. DrawLine (new Pen (color, 5), pos, EndPoint);

if (child!= null)

child. Draw (g, color);

g. FillEllipse (new SolidBrush(color), EndPoint.X-5f, EndPoint.Y -5f, 10,10);

}

bool IsAbleToRotate (double a)

{

double lb = minAngle; // нижняя граница

double ub = maxAngle; //

if (dir ==RotateDir. CounterClockWise)

{

ub = minAngle;

lb = maxAngle;

}

if (ub > lb)

if (a >= lb && a <= ub) return true;

else return false;

else if ((a >= lb && a < Math.PI * 2) || (a >= 0 && a < ub))

return true;

else return false;

}

public void SetRange (int min, int max)

{

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

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

}

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

{

if (dir == RotateDir. CounterClockWise)

Angle -= da;

else Angle += da;

}

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

{

if (dir == RotateDir. CounterClockWise)

Angle += da;

else Angle -= da;

}

}


Man.cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

using System. Drawing;

namespace ManComponent

{

class Head

{

const int r = 25;

int x, y;

public Head (int X, int Y)

{

x = X; y = Y;

}

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

}

class Man

{

int x, y, len;

public Color color;

public Rotary lArm, lElbow, rArm, rElbow, lLeg, lKnee, rLeg, rKnee;

public Head head;

public Man (int X, int Y, int length)

{ // положение человечка центр головы, длина туловища

x = X; y = Y; len = length;

color = Color. Blue;

lElbow = new Rotary (30,90); // левый локоть(предплечее)

lElbow. SetRange (90,270);

lArm = new Rotary (x, y+length*0.2f, 30, 135, RotateDir. ClockWise, lElbow); // левая рука

lArm. SetRange (135,225);

lKnee = new Rotary (35, 90);

lKnee. SetRange (90, 180);

lLeg = new Rotary (x, y + len, 35, 135, RotateDir. ClockWise, lKnee);

lLeg. SetRange (125, 180);

rElbow = new Rotary (30, 90); // правый локоть

rElbow. SetRange (90,270);

rArm = new Rotary (x, y + length * 0.2f, 30, 45, RotateDir. CounterClockWise, rElbow); // правая рука

rArm. SetRange (45, 315);

rKnee = new Rotary (35, 90);

rKnee. SetRange (90, 0);

rLeg = new Rotary (x, y + len, 35,45, RotateDir. CounterClockWise, rKnee);

rLeg. SetRange (45, 0);

head = new Head (x, y);

}

public void Draw (Graphics g)

{

lArm. Draw (g, color); // левая рука

rArm. Draw (g, color); // правая рука

lLeg. Draw (g, color); // левая нога

rLeg. Draw (g, color); // правая нога

head. Draw (g, color); // голова

g. DrawLine (new Pen (color, 5), x, y, x, y + len);

}

}


ManControl.cs

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Drawing;

using System. Data;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace ManComponent

{

[ToolboxBitmap (typeof(ManControl), «Man.bmp»)]

[Description («Двжущийся человек»)]

public partial class ManControl: UserControl

Man man;

 

[Category («Движущийся человек»), Description («Угловая скорость»), Browsable(true)]

public double dAngle {get {return Rotary.dAngle;} set {if (value >= 0 && value < Math.PI * 2) Rotary.dAngle = value;}}

[Category («Движущийся человек»), Description («Цвет человека»), Browsable(true)]

public Color Color {get {return man.color;} set {man.color = value; Refresh();}}

public ManControl()

InitializeComponent();

man = new Man (Width/2,40,80);

Color = Color. Black;

}

private void ManControl_Paint (object sender, PaintEventArgs e)

{

man. Draw (this. CreateGraphics());

}

man.lArm. RotateUp();

man.lElbow. RotateUp();

Refresh();

}

public void GetLeftLegUp()

{

man.lLeg. RotateUp();

man.lKnee. RotateUp();

Refresh();

}

public void GetRigthLegUp()

{

man.rLeg. RotateUp();

man.rKnee. RotateUp();

Refresh();

}

public void GetRightArmUp()

{

man.rArm. RotateUp();

man.rElbow. RotateUp();

Refresh();

}

public void GetLeftArmDown()

{

man.lArm. RotateDown();

man.lElbow. RotateDown();

Refresh();

}

public void GetLeftLegDown()

{

man.lLeg. RotateDown();

man.lKnee. RotateDown();

Refresh();

}

public void GetRigthLegDown()

{

man.rLeg. RotateDown();

man.rKnee. RotateDown();

Refresh();

}

public void GetRightArmDown()

{

man.rArm. RotateDown();

man.rElbow. RotateDown();

Refresh();

}

}

}

 

Размещено на Allbest.ru


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.037 с.