From a74bbd4dd3fe924407b299ed9590301f04ab5743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BE=D1=84=D1=8C=D1=8F=20=D0=AF=D0=BA=D0=BE=D0=B1?= =?UTF-8?q?=D1=87=D1=83=D0=BA?= Date: Sat, 2 Dec 2023 10:41:39 +0400 Subject: [PATCH] + --- Sailboat/Sailboat/BoatsGenericCollection.cs | 4 +- Sailboat/Sailboat/BoatsGenericStorage.cs | 84 +++++++++++++ .../Sailboat/FormBoatCollection.Designer.cs | 78 +++++++++++-- Sailboat/Sailboat/FormBoatCollection.cs | 110 +++++++++++++++--- 4 files changed, 254 insertions(+), 22 deletions(-) create mode 100644 Sailboat/Sailboat/BoatsGenericStorage.cs diff --git a/Sailboat/Sailboat/BoatsGenericCollection.cs b/Sailboat/Sailboat/BoatsGenericCollection.cs index 000eefd..2228a36 100644 --- a/Sailboat/Sailboat/BoatsGenericCollection.cs +++ b/Sailboat/Sailboat/BoatsGenericCollection.cs @@ -31,11 +31,11 @@ namespace Sailboat.Generics /// /// Размер занимаемого объектом места (ширина) /// - private readonly int _placeSizeWidth = 200; + private readonly int _placeSizeWidth = 160; /// /// Размер занимаемого объектом места (высота) /// - private readonly int _placeSizeHeight = 170; + private readonly int _placeSizeHeight = 160; /// /// Набор объектов /// diff --git a/Sailboat/Sailboat/BoatsGenericStorage.cs b/Sailboat/Sailboat/BoatsGenericStorage.cs new file mode 100644 index 0000000..8702e41 --- /dev/null +++ b/Sailboat/Sailboat/BoatsGenericStorage.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Sailboat.DrawingObjects; +using Sailboat.MovementStrategy; + +namespace Sailboat.Generics +{ + internal class BoatsGenericStorage + { + /// + /// Словарь (хранилище) + /// + readonly Dictionary> _boatStorages; + /// + /// Возвращение списка названий наборов + /// + public List Keys => _boatStorages.Keys.ToList(); + /// + /// Ширина окна отрисовки + /// + private readonly int _pictureWidth; + /// + /// Высота окна отрисовки + /// + private readonly int _pictureHeight; + /// + /// Конструктор + /// + /// + /// + public BoatsGenericStorage(int pictureWidth, int pictureHeight) + { + _boatStorages = new Dictionary>(); + _pictureWidth = pictureWidth; + _pictureHeight = pictureHeight; + } + /// + /// Добавление набора + /// + /// Название набора + public void AddSet(string name) + { + if (_boatStorages.ContainsKey(name)) + { + return; + } + _boatStorages[name] = new BoatsGenericCollection(_pictureWidth, _pictureHeight); + } + /// + /// Удаление набора + /// + /// Название набора + public void DelSet(string name) + { + if (!_boatStorages.ContainsKey(name)) + { + return; + } + _boatStorages.Remove(name); + } + /// + /// Доступ к набору + /// + /// + /// + public BoatsGenericCollection? + this[string ind] + { + get + { + if (_boatStorages.ContainsKey(ind)) + { + return _boatStorages[ind]; + } + return null; + } + } + } +} \ No newline at end of file diff --git a/Sailboat/Sailboat/FormBoatCollection.Designer.cs b/Sailboat/Sailboat/FormBoatCollection.Designer.cs index 76a90ca..8c18720 100644 --- a/Sailboat/Sailboat/FormBoatCollection.Designer.cs +++ b/Sailboat/Sailboat/FormBoatCollection.Designer.cs @@ -34,22 +34,28 @@ buttonRefreshCollection = new Button(); maskedTextBoxNumber = new MaskedTextBox(); groupBoxTools = new GroupBox(); + groupBoxCollection = new GroupBox(); + textBoxStorageName = new TextBox(); + listBoxStorages = new ListBox(); + buttonDelObject = new Button(); + buttonAddObject = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit(); groupBoxTools.SuspendLayout(); + groupBoxCollection.SuspendLayout(); SuspendLayout(); // // pictureBoxCollection // pictureBoxCollection.Location = new Point(0, 0); pictureBoxCollection.Name = "pictureBoxCollection"; - pictureBoxCollection.Size = new Size(750, 450); + pictureBoxCollection.Size = new Size(750, 600); pictureBoxCollection.SizeMode = PictureBoxSizeMode.AutoSize; pictureBoxCollection.TabIndex = 0; pictureBoxCollection.TabStop = false; // // buttonAddBoat // - buttonAddBoat.Location = new Point(6, 26); + buttonAddBoat.Location = new Point(5, 345); buttonAddBoat.Name = "buttonAddBoat"; buttonAddBoat.Size = new Size(197, 45); buttonAddBoat.TabIndex = 1; @@ -59,7 +65,7 @@ // // buttonRemoveBoat // - buttonRemoveBoat.Location = new Point(6, 145); + buttonRemoveBoat.Location = new Point(5, 462); buttonRemoveBoat.Name = "buttonRemoveBoat"; buttonRemoveBoat.Size = new Size(197, 45); buttonRemoveBoat.TabIndex = 2; @@ -69,7 +75,7 @@ // // buttonRefreshCollection // - buttonRefreshCollection.Location = new Point(6, 227); + buttonRefreshCollection.Location = new Point(6, 537); buttonRefreshCollection.Name = "buttonRefreshCollection"; buttonRefreshCollection.Size = new Size(197, 45); buttonRefreshCollection.TabIndex = 3; @@ -79,29 +85,80 @@ // // maskedTextBoxNumber // - maskedTextBoxNumber.Location = new Point(34, 112); + maskedTextBoxNumber.Location = new Point(39, 429); maskedTextBoxNumber.Name = "maskedTextBoxNumber"; maskedTextBoxNumber.Size = new Size(138, 27); maskedTextBoxNumber.TabIndex = 4; // // groupBoxTools // + groupBoxTools.Controls.Add(groupBoxCollection); groupBoxTools.Controls.Add(buttonAddBoat); groupBoxTools.Controls.Add(buttonRefreshCollection); groupBoxTools.Controls.Add(maskedTextBoxNumber); groupBoxTools.Controls.Add(buttonRemoveBoat); groupBoxTools.Location = new Point(756, 12); groupBoxTools.Name = "groupBoxTools"; - groupBoxTools.Size = new Size(209, 387); + groupBoxTools.Size = new Size(209, 588); groupBoxTools.TabIndex = 2; groupBoxTools.TabStop = false; groupBoxTools.Text = "Инструменты"; // + // groupBoxCollection + // + groupBoxCollection.Controls.Add(textBoxStorageName); + groupBoxCollection.Controls.Add(listBoxStorages); + groupBoxCollection.Controls.Add(buttonDelObject); + groupBoxCollection.Controls.Add(buttonAddObject); + groupBoxCollection.Location = new Point(6, 26); + groupBoxCollection.Name = "groupBoxCollection"; + groupBoxCollection.Size = new Size(196, 299); + groupBoxCollection.TabIndex = 5; + groupBoxCollection.TabStop = false; + groupBoxCollection.Text = "Наборы"; + // + // textBoxStorageName + // + textBoxStorageName.Location = new Point(6, 26); + textBoxStorageName.Name = "textBoxStorageName"; + textBoxStorageName.Size = new Size(184, 27); + textBoxStorageName.TabIndex = 3; + // + // listBoxStorages + // + listBoxStorages.FormattingEnabled = true; + listBoxStorages.ItemHeight = 20; + listBoxStorages.Location = new Point(21, 101); + listBoxStorages.Name = "listBoxStorages"; + listBoxStorages.Size = new Size(150, 124); + listBoxStorages.TabIndex = 2; + listBoxStorages.SelectedIndexChanged += listBoxStorages_SelectedIndexChanged; + // + // buttonDelObject + // + buttonDelObject.Location = new Point(5, 256); + buttonDelObject.Name = "buttonDelObject"; + buttonDelObject.Size = new Size(191, 37); + buttonDelObject.TabIndex = 1; + buttonDelObject.Text = "Удалить набор"; + buttonDelObject.UseVisualStyleBackColor = true; + buttonDelObject.Click += buttonDelObject_Click; + // + // buttonAddObject + // + buttonAddObject.Location = new Point(6, 59); + buttonAddObject.Name = "buttonAddObject"; + buttonAddObject.Size = new Size(184, 36); + buttonAddObject.TabIndex = 0; + buttonAddObject.Text = "Добавить набор"; + buttonAddObject.UseVisualStyleBackColor = true; + buttonAddObject.Click += buttonAddObject_Click; + // // FormBoatCollection // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(973, 403); + ClientSize = new Size(970, 606); Controls.Add(groupBoxTools); Controls.Add(pictureBoxCollection); Name = "FormBoatCollection"; @@ -109,6 +166,8 @@ ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit(); groupBoxTools.ResumeLayout(false); groupBoxTools.PerformLayout(); + groupBoxCollection.ResumeLayout(false); + groupBoxCollection.PerformLayout(); ResumeLayout(false); PerformLayout(); } @@ -121,5 +180,10 @@ private Button buttonRefreshCollection; private MaskedTextBox maskedTextBoxNumber; private GroupBox groupBoxTools; + private GroupBox groupBoxCollection; + private ListBox listBoxStorages; + private Button buttonDelObject; + private Button buttonAddObject; + private TextBox textBoxStorageName; } } \ No newline at end of file diff --git a/Sailboat/Sailboat/FormBoatCollection.cs b/Sailboat/Sailboat/FormBoatCollection.cs index fffacea..10332da 100644 --- a/Sailboat/Sailboat/FormBoatCollection.cs +++ b/Sailboat/Sailboat/FormBoatCollection.cs @@ -1,7 +1,4 @@ -using Sailboat.DrawingObjects; -using Sailboat.Generics; -using Sailboat.MovementStrategy; -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -11,26 +8,61 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using Sailboat.DrawingObjects; +using Sailboat.Generics; +using Sailboat.MovementStrategy; + namespace Sailboat { public partial class FormBoatCollection : Form { - private readonly BoatsGenericCollection _boats; + private readonly BoatsGenericStorage _storage; public FormBoatCollection() { InitializeComponent(); - _boats = new BoatsGenericCollection(pictureBoxCollection.Width, pictureBoxCollection.Height); + _storage = new BoatsGenericStorage(pictureBoxCollection.Width, pictureBoxCollection.Height); } + private void ReloadObjects() + { + int index = listBoxStorages.SelectedIndex; + listBoxStorages.Items.Clear(); + + for (int i = 0; i < _storage.Keys.Count; i++) + { + listBoxStorages.Items.Add(_storage.Keys[i]); + } + + if (listBoxStorages.Items.Count > 0 && (index == -1 || index + >= listBoxStorages.Items.Count)) + { + listBoxStorages.SelectedIndex = 0; + } + else if (listBoxStorages.Items.Count > 0 && index > -1 && + index < listBoxStorages.Items.Count) + { + listBoxStorages.SelectedIndex = index; + } + } private void buttonAddBoat_Click(object sender, EventArgs e) { + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? + string.Empty]; + if (obj == null) + { + return; + } FormSailboat form = new(); if (form.ShowDialog() == DialogResult.OK) { - if (_boats + form.SelectedBoat != -1) + if (obj + form.SelectedBoat) { MessageBox.Show("Объект добавлен"); - pictureBoxCollection.Image = _boats.ShowBoats(); + pictureBoxCollection.Image = obj.ShowBoats(); } else { @@ -41,26 +73,78 @@ namespace Sailboat private void buttonRemoveBoat_Click(object sender, EventArgs e) { - if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? + string.Empty]; + if (obj == null) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", + MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } int pos = Convert.ToInt32(maskedTextBoxNumber.Text); - if (_boats - pos != null) + if (obj - pos != null) { MessageBox.Show("Объект удален"); - pictureBoxCollection.Image = _boats.ShowBoats(); + pictureBoxCollection.Image = obj.ShowBoats(); } else { MessageBox.Show("Не удалось удалить объект"); } - } private void buttonRefreshCollection_Click(object sender, EventArgs e) { - pictureBoxCollection.Image = _boats.ShowBoats(); + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? + string.Empty]; + if (obj == null) + { + return; + } + pictureBoxCollection.Image = obj.ShowBoats(); + } + + private void buttonAddObject_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxStorageName.Text)) + { + MessageBox.Show("Не все данные заполнены", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _storage.AddSet(textBoxStorageName.Text); + ReloadObjects(); + } + + private void listBoxStorages_SelectedIndexChanged(object sender, EventArgs e) + { + pictureBoxCollection.Image = + _storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowBoats(); + } + + private void buttonDelObject_Click(object sender, EventArgs e) + { + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + _storage.DelSet(listBoxStorages.SelectedItem.ToString() + ?? string.Empty); + ReloadObjects(); + } } } }