From a99818caf50e093cda840c16ee58d01ccd88065a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D0=B8=D1=8F=20=D0=9D=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=D1=84=D0=BE=D1=80=D0=BE=D0=B2=D0=B0?= Date: Tue, 6 Sep 2022 14:06:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AccordionBus/AccordionBus/AccordionBus.csproj | 15 ++ AccordionBus/AccordionBus/Direction.cs | 19 ++ AccordionBus/AccordionBus/DrawningBus.cs | 181 ++++++++++++++++++ AccordionBus/AccordionBus/EntityBus.cs | 45 +++++ AccordionBus/AccordionBus/Form1.Designer.cs | 39 ---- AccordionBus/AccordionBus/Form1.cs | 10 - AccordionBus/AccordionBus/FormBus.Designer.cs | 180 +++++++++++++++++ AccordionBus/AccordionBus/FormBus.cs | 75 ++++++++ AccordionBus/AccordionBus/FormBus.resx | 63 ++++++ AccordionBus/AccordionBus/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 103 ++++++++++ .../{Form1.resx => Properties/Resources.resx} | 13 ++ .../AccordionBus/Resources/arrowDown.jpg | Bin 0 -> 4966 bytes .../AccordionBus/Resources/arrowLeft.jpg | Bin 0 -> 4743 bytes .../AccordionBus/Resources/arrowRight.jpg | Bin 0 -> 5005 bytes .../AccordionBus/Resources/arrowUp.jpg | Bin 0 -> 4733 bytes 16 files changed, 695 insertions(+), 50 deletions(-) create mode 100644 AccordionBus/AccordionBus/Direction.cs create mode 100644 AccordionBus/AccordionBus/DrawningBus.cs create mode 100644 AccordionBus/AccordionBus/EntityBus.cs delete mode 100644 AccordionBus/AccordionBus/Form1.Designer.cs delete mode 100644 AccordionBus/AccordionBus/Form1.cs create mode 100644 AccordionBus/AccordionBus/FormBus.Designer.cs create mode 100644 AccordionBus/AccordionBus/FormBus.cs create mode 100644 AccordionBus/AccordionBus/FormBus.resx create mode 100644 AccordionBus/AccordionBus/Properties/Resources.Designer.cs rename AccordionBus/AccordionBus/{Form1.resx => Properties/Resources.resx} (83%) create mode 100644 AccordionBus/AccordionBus/Resources/arrowDown.jpg create mode 100644 AccordionBus/AccordionBus/Resources/arrowLeft.jpg create mode 100644 AccordionBus/AccordionBus/Resources/arrowRight.jpg create mode 100644 AccordionBus/AccordionBus/Resources/arrowUp.jpg diff --git a/AccordionBus/AccordionBus/AccordionBus.csproj b/AccordionBus/AccordionBus/AccordionBus.csproj index b57c89e..13ee123 100644 --- a/AccordionBus/AccordionBus/AccordionBus.csproj +++ b/AccordionBus/AccordionBus/AccordionBus.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/AccordionBus/AccordionBus/Direction.cs b/AccordionBus/AccordionBus/Direction.cs new file mode 100644 index 0000000..37ca4d2 --- /dev/null +++ b/AccordionBus/AccordionBus/Direction.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AccordionBus +{ + /// + /// Направление перемещения + /// + internal enum Direction + { + Up = 1, + Down = 2, + Left = 3, + Right = 4 + } +} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/DrawningBus.cs b/AccordionBus/AccordionBus/DrawningBus.cs new file mode 100644 index 0000000..cbd0349 --- /dev/null +++ b/AccordionBus/AccordionBus/DrawningBus.cs @@ -0,0 +1,181 @@ +using AccordionBus; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AccordionBus +{ + /// + /// Класс, отвечающий за прорисовку и перемещение объекта-сущности + /// + internal class DrawningBus + { + /// + /// Класс-сущность + /// + public EntityBus Bus { get; private set; } + /// + /// Левая координата отрисовки автобуса + /// + private float _startPosX; + /// + /// Верхняя кооридната отрисовки автобуса + /// + private float _startPosY; + /// + /// Ширина окна отрисовки + /// + private int? _pictureWidth = null; + /// + /// Высота окна отрисовки + /// + private int? _pictureHeight = null; + /// + /// Ширина отрисовки автобуса + /// + private readonly int _busWidth = 160; + /// + /// Высота отрисовки автобуса + /// + private readonly int _busHeight = 70; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автобуса + /// Цвет кузова + public void Init(int speed, float weight, Color bodyColor) + { + Bus = new EntityBus(); + Bus.Init(speed, weight, bodyColor); + } + /// + /// Установка позиции автобуса + /// + /// Координата X + /// Координата Y + /// Ширина картинки + /// Высота картинки + public void SetPosition(int x, int y, int width, int height) + { + if (x + _busWidth > width || y + _busHeight > height) + { + return; + } + _startPosX = x; + _startPosY = y; + _pictureWidth = width; + _pictureHeight = height; + } + /// + /// Изменение направления перемещения + /// + /// Направление + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _busWidth + Bus.Step < _pictureWidth) + { + _startPosX += Bus.Step; + } + break; + //влево + case Direction.Left: + if (_startPosX > Bus.Step) + { + _startPosX -= Bus.Step; + } + break; + //вверх + case Direction.Up: + if (_startPosY > Bus.Step) + { + _startPosY -= Bus.Step; + } + break; + //вниз + case Direction.Down: + if (_startPosY + _busHeight + Bus.Step < _pictureHeight) + { + _startPosY += Bus.Step; + } + break; + } + } + /// + /// Отрисовка автобуса + /// + /// + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 + || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + //кузов + Brush br = new SolidBrush(Bus?.BodyColor ?? Color.Black); + g.FillRectangle(br, _startPosX + 10, _startPosY + 10, 150, 50); + + //границы автобуса + Pen pen = new(Color.Black); + g.DrawRectangle(pen, _startPosX + 10, _startPosY + 10, 150, 50); + + //колеса + Brush brBlack = new SolidBrush(Color.Black); + g.FillEllipse(brBlack, _startPosX + 20, _startPosY + 50, 20, 20); + g.FillEllipse(brBlack, _startPosX + 130, _startPosY + 50, 20, 20); + Brush brGray = new SolidBrush(Color.Gray); + g.FillEllipse(brGray, _startPosX + 25, _startPosY + 55, 10, 10); + g.FillEllipse(brGray, _startPosX + 135, _startPosY + 55, 10, 10); + + //стекла + Brush brBlue = new SolidBrush(Color.LightBlue); + g.FillRectangle(brBlue, _startPosX + 10, _startPosY + 20, 10, 20); + g.DrawRectangle(pen, _startPosX + 10, _startPosY + 20, 10, 20); + g.FillRectangle(brBlue, _startPosX + 30, _startPosY + 20, 30, 20); + g.DrawRectangle(pen, _startPosX + 30, _startPosY + 20, 30, 20); + g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 20, 15, 40); + g.DrawRectangle(pen, _startPosX + 70, _startPosY + 20, 15, 40); + g.FillRectangle(brBlue, _startPosX + 85, _startPosY + 20, 15, 40); + g.DrawRectangle(pen, _startPosX + 85, _startPosY + 20, 15, 40); + g.FillRectangle(brBlue, _startPosX + 110, _startPosY + 20, 30, 20); + g.DrawRectangle(pen, _startPosX + 110, _startPosY + 20, 30, 20); + g.FillRectangle(brBlue, _startPosX + 150, _startPosY + 20, 10, 20); + g.DrawRectangle(pen, _startPosX + 150, _startPosY + 20, 10, 20); + } + /// + /// Смена границ формы отрисовки + /// + /// Ширина картинки + /// Высота картинки + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _busWidth || _pictureHeight <= _busHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _busWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _busWidth; + } + if (_startPosY + _busHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _busHeight; + } + } + } +} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/EntityBus.cs b/AccordionBus/AccordionBus/EntityBus.cs new file mode 100644 index 0000000..1660266 --- /dev/null +++ b/AccordionBus/AccordionBus/EntityBus.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AccordionBus +{ + /// + /// Класс-сущность "Автобус" + /// + internal class EntityBus + { + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public float Weight { get; private set; } + /// + /// Цвет кузова + /// + public Color BodyColor { get; private set; } + /// + /// Шаг перемещения автобуса + /// + public float Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса автобуса + /// + /// + /// + /// + /// + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new(); + Speed = speed <= 0 ? rnd.Next(50, 150) : speed; + Weight = weight <= 0 ? rnd.Next(40, 70) : weight; + BodyColor = bodyColor; + } + } +} diff --git a/AccordionBus/AccordionBus/Form1.Designer.cs b/AccordionBus/AccordionBus/Form1.Designer.cs deleted file mode 100644 index 82cd24d..0000000 --- a/AccordionBus/AccordionBus/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace AccordionBus -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/Form1.cs b/AccordionBus/AccordionBus/Form1.cs deleted file mode 100644 index a5c78a7..0000000 --- a/AccordionBus/AccordionBus/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AccordionBus -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/FormBus.Designer.cs b/AccordionBus/AccordionBus/FormBus.Designer.cs new file mode 100644 index 0000000..a7e6646 --- /dev/null +++ b/AccordionBus/AccordionBus/FormBus.Designer.cs @@ -0,0 +1,180 @@ +namespace AccordionBus +{ + partial class FormBus + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.pictureBoxBus = new System.Windows.Forms.PictureBox(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelBodyColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBus)).BeginInit(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBoxBus + // + this.pictureBoxBus.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxBus.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBus.Name = "pictureBoxBus"; + this.pictureBoxBus.Size = new System.Drawing.Size(800, 424); + this.pictureBoxBus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxBus.TabIndex = 0; + this.pictureBoxBus.TabStop = false; + this.pictureBoxBus.Resize += new System.EventHandler(this.PictureBoxBus_Resize); + // + // statusStrip + // + this.statusStrip.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelBodyColor}); + this.statusStrip.Location = new System.Drawing.Point(0, 424); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(800, 26); + this.statusStrip.TabIndex = 1; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(76, 20); + this.toolStripStatusLabelSpeed.Text = "Скорость:"; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(36, 20); + this.toolStripStatusLabelWeight.Text = "Вес:"; + // + // toolStripStatusLabelBodyColor + // + this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(45, 20); + this.toolStripStatusLabelBodyColor.Text = "Цвет:"; + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreate.Location = new System.Drawing.Point(12, 382); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.ButtonCreate_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::AccordionBus.Properties.Resources.arrowUp; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(722, 345); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(30, 30); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonLeft + // + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = global::AccordionBus.Properties.Resources.arrowLeft; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(686, 381); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(30, 30); + this.buttonLeft.TabIndex = 4; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::AccordionBus.Properties.Resources.arrowDown; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(722, 381); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(30, 30); + this.buttonDown.TabIndex = 5; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonRight + // + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = global::AccordionBus.Properties.Resources.arrowRight; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(758, 381); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(30, 30); + this.buttonRight.TabIndex = 6; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // FormBus + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.pictureBoxBus); + this.Controls.Add(this.statusStrip); + this.Name = "FormBus"; + this.Text = "Автобус"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBus)).EndInit(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private PictureBox pictureBoxBus; + private StatusStrip statusStrip; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelBodyColor; + private Button buttonCreate; + private Button buttonUp; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/FormBus.cs b/AccordionBus/AccordionBus/FormBus.cs new file mode 100644 index 0000000..7afa1c3 --- /dev/null +++ b/AccordionBus/AccordionBus/FormBus.cs @@ -0,0 +1,75 @@ +using AccordionBus; + +namespace AccordionBus +{ + public partial class FormBus : Form + { + private DrawningBus _bus; + public FormBus() + { + InitializeComponent(); + } + /// + /// + /// + private void Draw() + { + Bitmap bmp = new(pictureBoxBus.Width, pictureBoxBus.Height); + Graphics gr = Graphics.FromImage(bmp); + _bus?.DrawTransport(gr); + pictureBoxBus.Image = bmp; + } + /// + /// "" + /// + /// + /// + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + _bus = new DrawningBus(); + _bus.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _bus.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxBus.Width, pictureBoxBus.Height); + toolStripStatusLabelSpeed.Text = $": {_bus.Bus.Speed}"; + toolStripStatusLabelWeight.Text = $": {_bus.Bus.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_bus.Bus.BodyColor.Name}"; + Draw(); + } + /// + /// + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "buttonUp": + _bus?.MoveTransport(Direction.Up); + break; + case "buttonDown": + _bus?.MoveTransport(Direction.Down); + break; + case "buttonLeft": + _bus?.MoveTransport(Direction.Left); + break; + case "buttonRight": + _bus?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + /// + /// + /// + /// + /// + private void PictureBoxBus_Resize(object sender, EventArgs e) + { + _bus?.ChangeBorders(pictureBoxBus.Width, pictureBoxBus.Height); + Draw(); + } + } +} \ No newline at end of file diff --git a/AccordionBus/AccordionBus/FormBus.resx b/AccordionBus/AccordionBus/FormBus.resx new file mode 100644 index 0000000..2c0949d --- /dev/null +++ b/AccordionBus/AccordionBus/FormBus.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AccordionBus/AccordionBus/Program.cs b/AccordionBus/AccordionBus/Program.cs index 3c106fa..d61b8c2 100644 --- a/AccordionBus/AccordionBus/Program.cs +++ b/AccordionBus/AccordionBus/Program.cs @@ -11,7 +11,7 @@ namespace AccordionBus // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormBus()); } } } \ No newline at end of file diff --git a/AccordionBus/AccordionBus/Properties/Resources.Designer.cs b/AccordionBus/AccordionBus/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d7ce417 --- /dev/null +++ b/AccordionBus/AccordionBus/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace AccordionBus.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AccordionBus.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowDown { + get { + object obj = ResourceManager.GetObject("arrowDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowLeft { + get { + object obj = ResourceManager.GetObject("arrowLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowRight { + get { + object obj = ResourceManager.GetObject("arrowRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowUp { + get { + object obj = ResourceManager.GetObject("arrowUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/AccordionBus/AccordionBus/Form1.resx b/AccordionBus/AccordionBus/Properties/Resources.resx similarity index 83% rename from AccordionBus/AccordionBus/Form1.resx rename to AccordionBus/AccordionBus/Properties/Resources.resx index 1af7de1..293419e 100644 --- a/AccordionBus/AccordionBus/Form1.resx +++ b/AccordionBus/AccordionBus/Properties/Resources.resx @@ -117,4 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\arrowDown.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/AccordionBus/AccordionBus/Resources/arrowDown.jpg b/AccordionBus/AccordionBus/Resources/arrowDown.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23852c3288afa74e4b593624753a7342244210f3 GIT binary patch literal 4966 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 literal 0 HcmV?d00001 diff --git a/AccordionBus/AccordionBus/Resources/arrowRight.jpg b/AccordionBus/AccordionBus/Resources/arrowRight.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20a623f1c4789a53ac5d118cf978822dbb2d2210 GIT binary patch literal 5005 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 L6!{-}puv9vW|(QG literal 0 HcmV?d00001