diff --git a/ProjectTank/ProjectTank/CollectionGenericObjects/AbstractCompany.cs b/ProjectTank/ProjectTank/CollectionGenericObjects/AbstractCompany.cs
index 1d4318f..c35f5ad 100644
--- a/ProjectTank/ProjectTank/CollectionGenericObjects/AbstractCompany.cs
+++ b/ProjectTank/ProjectTank/CollectionGenericObjects/AbstractCompany.cs
@@ -1,7 +1,12 @@
using ProjectTank.Drawnings;
+using ProjectTank.CollectionGenericObjects;
+using ProjectTank.Exceptions;
namespace ProjectTank.CollectionGenericObjects;
+///
+/// Абстракция компании, хранящий коллекцию самолётов
+///
public abstract class AbstractCompany
{
///
@@ -25,23 +30,22 @@ public abstract class AbstractCompany
protected readonly int _pictureHeight;
///
- /// Коллекция машин
+ /// Коллекция самолётов
///
protected ICollectionGenericObjects? _collection = null;
///
/// Вычисление максимального количества элементов, который можно разместить в окне
///
- private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
+ private int GetMaxCount => (_pictureWidth / _placeSizeWidth) * (_pictureHeight / _placeSizeHeight);
///
/// Конструктор
///
/// Ширина окна
/// Высота окна
- /// Коллекция машин
- public AbstractCompany(int picWidth, int picHeight,
- ICollectionGenericObjects collection)
+ /// Коллекция самолётов
+ public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects collection)
{
_pictureWidth = picWidth;
_pictureHeight = picHeight;
@@ -53,7 +57,7 @@ public abstract class AbstractCompany
/// Перегрузка оператора сложения для класса
///
/// Компания
- /// Добавляемый объект
+ /// Добавляемый объект
///
public static int operator +(AbstractCompany company, DrawningTank2 tank2)
{
@@ -66,9 +70,9 @@ public abstract class AbstractCompany
/// Компания
/// Номер удаляемого объекта
///
- public static DrawningTank2 operator -(AbstractCompany company, int position)
+ public static DrawningTank2? operator -(AbstractCompany company, int position)
{
- return company._collection.Remove(position);
+ return company._collection?.Remove(position);
}
///
@@ -90,11 +94,19 @@ public abstract class AbstractCompany
Bitmap bitmap = new(_pictureWidth, _pictureHeight);
Graphics graphics = Graphics.FromImage(bitmap);
DrawBackgound(graphics);
+
SetObjectsPosition();
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
{
- DrawningTank2? obj = _collection?.Get(i);
- obj?.DrawTransport(graphics);
+ try
+ {
+ DrawningTank2? obj = _collection?.Get(i);
+ obj?.DrawTransport(graphics);
+ }
+ catch (ObjectNotFoundException)
+ {
+
+ }
}
return bitmap;
}
@@ -104,8 +116,9 @@ public abstract class AbstractCompany
///
///
protected abstract void DrawBackgound(Graphics g);
+
///
/// Расстановка объектов
///
protected abstract void SetObjectsPosition();
-}
+}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/CollectionGenericObjects/ListGenericObjects.cs b/ProjectTank/ProjectTank/CollectionGenericObjects/ListGenericObjects.cs
index 5981b16..9c85d6d 100644
--- a/ProjectTank/ProjectTank/CollectionGenericObjects/ListGenericObjects.cs
+++ b/ProjectTank/ProjectTank/CollectionGenericObjects/ListGenericObjects.cs
@@ -1,5 +1,11 @@
-namespace ProjectTank.CollectionGenericObjects;
+using ProjectTank.CollectionGenericObjects;
+using ProjectTank.Exceptions;
+namespace ProjectTank.CollectionGenericObjects;
+///
+/// Параметризованный набор объектов
+///
+/// Параметр: ограничение - ссылочный тип
public class ListGenericObjects : ICollectionGenericObjects
where T : class
{
@@ -7,7 +13,6 @@ public class ListGenericObjects : ICollectionGenericObjects
/// Список объектов, которые храним
///
private readonly List _collection;
-
///
/// Максимально допустимое число объектов в списке
///
@@ -17,7 +22,7 @@ public class ListGenericObjects : ICollectionGenericObjects
{
get
{
- return Count;
+ return _collection.Count;
}
set
{
@@ -37,37 +42,28 @@ public class ListGenericObjects : ICollectionGenericObjects
{
_collection = new();
}
-
public T? Get(int position)
{
- // TODO проверка позиции
- if (position >= Count || position < 0) return null;
+ if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position);
+ if (_collection[position] == null) throw new ObjectNotFoundException();
return _collection[position];
}
public int Insert(T obj)
{
- // TODO проверка, что не превышено максимальное количество элементов
- // TODO вставка в конец набора
-
- if (Count + 1 > _maxCount) return -1;
+ if (Count + 1 > _maxCount) throw new CollectionOverflowException(Count);
_collection.Add(obj);
return Count;
}
public int Insert(T obj, int position)
{
- // TODO проверка, что не превышено максимальное количество элементов
- // TODO проверка позиции
- // TODO вставка по позиции
- if (Count + 1 > _maxCount) return -1;
- if (position < 0 || position > Count) return -1;
+ if (Count + 1 > _maxCount) throw new CollectionOverflowException(Count);
+ if (position < 0 || position > Count) throw new PositionOutOfCollectionException(position);
_collection.Insert(position, obj);
- return 1;
+ return position;
}
public T? Remove(int position)
{
- // TODO проверка позиции
- // TODO удаление объекта из списка
- if (position < 0 || position > Count) return null;
+ if (position < 0 || position > Count) throw new PositionOutOfCollectionException(position);
T? temp = _collection[position];
_collection.RemoveAt(position);
return temp;
@@ -80,4 +76,4 @@ public class ListGenericObjects : ICollectionGenericObjects
yield return _collection[i];
}
}
-}
+}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectTank/ProjectTank/CollectionGenericObjects/MassiveGenericObjects.cs
index f0572fc..24a497b 100644
--- a/ProjectTank/ProjectTank/CollectionGenericObjects/MassiveGenericObjects.cs
+++ b/ProjectTank/ProjectTank/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -1,6 +1,14 @@
-namespace ProjectTank.CollectionGenericObjects;
+
+using ProjectTank.CollectionGenericObjects;
+using ProjectTank.Exceptions;
-internal class MassiveGenericObjects : ICollectionGenericObjects
+namespace ProjectTank.CollectionGenericObjects;
+
+///
+/// Параметризованный набор объектов
+///
+/// Параметр: ограничение - ссылочный тип
+public class MassiveGenericObjects : ICollectionGenericObjects
where T : class
{
///
@@ -47,12 +55,9 @@ internal class MassiveGenericObjects : ICollectionGenericObjects
public T? Get(int position)
{
// TODO проверка позиции
- if (position <= Count)
- {
- return _collection[position];
- }
- else
- return null;
+ if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position);
+ if (_collection[position] == null) throw new ObjectNotFoundException(position);
+ return _collection[position];
}
public int Insert(T obj)
{
@@ -65,7 +70,7 @@ internal class MassiveGenericObjects : ICollectionGenericObjects
return i;
}
}
- return -1;
+ throw new CollectionOverflowException(Count);
}
public int Insert(T obj, int position)
@@ -75,39 +80,55 @@ internal class MassiveGenericObjects : ICollectionGenericObjects
// ищется свободное место после этой позиции и идет туда
// если нет после, ищем до
// TODO вставка
- if (position < Count)
+ if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position);
+
+ if (_collection[position] != null)
{
- if (position < 0 || position >= Count)
+ bool pushed = false;
+ for (int index = position + 1; index < Count; index++)
{
- return -1;
- }
- if (_collection[position] == null)
- {
- _collection[position] = obj;
- return position;
- }
- else
- {
- for (int i = 0; i < Count; i++)
+ if (_collection[index] == null)
{
- if (_collection[i] == null)
+ position = index;
+ pushed = true;
+ break;
+ }
+ }
+
+ if (!pushed)
+ {
+ for (int index = position - 1; index >= 0; index--)
+ {
+ if (_collection[index] == null)
{
- _collection[i] = obj;
- return i;
+ position = index;
+ pushed = true;
+ break;
}
}
}
+
+ if (!pushed)
+ {
+ throw new CollectionOverflowException(Count);
+ }
}
- return -1;
+
+ // вставка
+ _collection[position] = obj;
+ return position;
}
public T? Remove(int position)
{
// TODO проверка позиции
// TODO удаление объекта из массива, присвоив элементу массива значение null
- if (position >= Count || position < 0) return null;
- T? myObject = _collection[position];
+ if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position);
+
+ if (_collection[position] == null) throw new ObjectNotFoundException(position);
+
+ T? temp = _collection[position];
_collection[position] = null;
- return myObject;
+ return temp;
}
public IEnumerable GetItems()
@@ -119,6 +140,3 @@ internal class MassiveGenericObjects : ICollectionGenericObjects
}
}
-
-
-
diff --git a/ProjectTank/ProjectTank/CollectionGenericObjects/StorageCollection.cs b/ProjectTank/ProjectTank/CollectionGenericObjects/StorageCollection.cs
index eff5415..5206b77 100644
--- a/ProjectTank/ProjectTank/CollectionGenericObjects/StorageCollection.cs
+++ b/ProjectTank/ProjectTank/CollectionGenericObjects/StorageCollection.cs
@@ -1,4 +1,7 @@
using ProjectTank.Drawnings;
+using ProjectTank.CollectionGenericObjects;
+using ProjectTank.Exceptions;
+using System.Data;
using System.Text;
namespace ProjectTank.CollectionGenericObjects;
@@ -7,7 +10,7 @@ namespace ProjectTank.CollectionGenericObjects;
/// Класс-хранилище коллекций
///
///
-internal class StorageCollection
+public class StorageCollection
where T : DrawningTank2
{
///
@@ -21,19 +24,20 @@ internal class StorageCollection
public List Keys => _storages.Keys.ToList();
///
- /// Ключевое слово, с которого должен начинаться файл
- ///
- private readonly string _collectionKey = "CollectionsStorage";
+ /// Ключевое слово, с которого должен начинаться файл
+ ///
+ private readonly string _collectionKey = "CollectionsStorage";
+
///
/// Разделитель для записи ключа и значения элемента словаря
///
private readonly string _separatorForKeyValue = "|";
+
///
/// Разделитель для записей коллекции данных в файл
///
private readonly string _separatorItems = ";";
-
///
/// Конструктор
///
@@ -49,15 +53,13 @@ internal class StorageCollection
/// тип коллекции
public void AddCollection(string name, CollectionType collectionType)
{
- // TODO проверка, что name не пустой и нет в словаре записи с таким ключом
- // TODO Прописать логику для добавления
+
if (_storages.ContainsKey(name)) return;
if (collectionType == CollectionType.None) return;
else if (collectionType == CollectionType.Massive)
_storages[name] = new MassiveGenericObjects();
else if (collectionType == CollectionType.List)
_storages[name] = new ListGenericObjects();
-
}
///
@@ -66,7 +68,6 @@ internal class StorageCollection
/// Название коллекции
public void DelCollection(string name)
{
- // TODO Прописать логику для удаления коллекции
if (_storages.ContainsKey(name))
_storages.Remove(name);
}
@@ -80,7 +81,6 @@ internal class StorageCollection
{
get
{
- // TODO Продумать логику получения объекта
if (_storages.ContainsKey(name))
return _storages[name];
return null;
@@ -88,15 +88,14 @@ internal class StorageCollection
}
///
- /// Сохранение информации по автомобилям в хранилище в файл
+ /// Сохранение информации по самолётам в хранилище в файл
///
/// Путь и имя файла
- /// true - сохранение прошло успешно, false - ошибка при сохранении данных
- public bool SaveData(string filename)
+ public void SaveData(string filename)
{
if (_storages.Count == 0)
{
- return false;
+ throw new InvalidDataException("В хранилище отсутствуют коллекции для сохранения");
}
if (File.Exists(filename))
@@ -136,22 +135,18 @@ internal class StorageCollection
}
writer.Write(sb);
}
-
}
- return true;
-
}
///
- /// Загрузка информации по автомобилям в хранилище из файла
+ /// Загрузка информации по самолётам в хранилище из файла
///
/// Путь и имя файла
- /// true - загрузка прошла успешно, false - ошибка при загрузке данных
- public bool LoadData(string filename)
+ public void LoadData(string filename)
{
if (!File.Exists(filename))
{
- return false;
+ throw new FileNotFoundException($"{filename} не существует");
}
using (StreamReader fs = File.OpenText(filename))
@@ -159,11 +154,11 @@ internal class StorageCollection
string str = fs.ReadLine();
if (str == null || str.Length == 0)
{
- return false;
+ throw new FileFormatException("Файл не подходит");
}
if (!str.StartsWith(_collectionKey))
{
- return false;
+ throw new IOException("В файле неверные данные");
}
_storages.Clear();
string strs = "";
@@ -178,7 +173,7 @@ internal class StorageCollection
ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType);
if (collection == null)
{
- return false;
+ throw new InvalidCastException("Не удалось определить тип коллекции:" + record[1]);
}
collection.MaxCount = Convert.ToInt32(record[2]);
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
@@ -186,17 +181,24 @@ internal class StorageCollection
{
if (elem?.CreateDrawningTank2() is T tank2)
{
- if (collection.Insert(tank2) == -1)
+ try
{
- return false;
+ if (collection.Insert(tank2) == -1)
+ {
+ throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]);
+ }
+ }
+ catch (CollectionOverflowException ex)
+ {
+ throw new DataException("Коллекция переполнена", ex);
}
}
}
_storages.Add(record[0], collection);
}
- return true;
}
}
+
///
/// Создание коллекции по типу
///
@@ -212,3 +214,4 @@ internal class StorageCollection
};
}
}
+
diff --git a/ProjectTank/ProjectTank/CollectionGenericObjects/TankBase.cs b/ProjectTank/ProjectTank/CollectionGenericObjects/TankBase.cs
index 7ecac01..71725bf 100644
--- a/ProjectTank/ProjectTank/CollectionGenericObjects/TankBase.cs
+++ b/ProjectTank/ProjectTank/CollectionGenericObjects/TankBase.cs
@@ -1,11 +1,11 @@
using ProjectTank.Drawnings;
-using ProjectTank.Entities;
-using System;
+using ProjectTank.CollectionGenericObjects;
+using ProjectTank.Exceptions;
namespace ProjectTank.CollectionGenericObjects;
///
-/// Реализация абстрактной компании - аренда поезда
+/// Реализация абстрактной компании - СимбирФлот
///
public class TankBase : AbstractCompany
{
@@ -18,7 +18,12 @@ public class TankBase : AbstractCompany
public TankBase(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection)
{
}
-
+ ///
+ /// Отрисовка хранилища
+ ///
+ /// Графика
+ int pamat_i = 0;
+ int pamat_j = 0;
protected override void DrawBackgound(Graphics g)
{
Pen pen = new(Color.Black);
@@ -31,24 +36,40 @@ public class TankBase : AbstractCompany
}
g.DrawLine(pen, new(_placeSizeWidth * i, _placeSizeHeight * (_pictureHeight / _placeSizeHeight)), new((int)(_placeSizeWidth * (i + 0.5f)), _placeSizeHeight * (_pictureHeight / _placeSizeHeight)));
}
-
-
}
+
+
+ ///
+ /// Установка объекта в Хранилище
+ ///
protected override void SetObjectsPosition()
{
+
int n = 0;
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
{
for (int j = 0; j < _pictureHeight / _placeSizeHeight; j++)
{
- DrawningTank2? drawningTank2 = _collection?.Get(n);
- n++;
- if (drawningTank2 != null)
+ try
{
- drawningTank2.SetPictureSize(_pictureWidth, _pictureHeight);
- drawningTank2.SetPosition(i * _placeSizeWidth + 5, j * _placeSizeHeight + 5);
+ DrawningTank2? tank2 = _collection?.Get(n);
+ if (tank2 != null)
+ {
+ tank2.SetPictureSize(_pictureWidth, _pictureHeight);
+ tank2.SetPosition(i * _placeSizeWidth + 5, j * _placeSizeHeight + 5);
+ }
}
+ catch (PositionOutOfCollectionException e)
+ {
+
+ }
+ catch (ObjectNotFoundException e)
+ {
+
+ }
+
+ n++;
}
}
}
diff --git a/ProjectTank/ProjectTank/Exceptions/CollectionOverflowException.cs b/ProjectTank/ProjectTank/Exceptions/CollectionOverflowException.cs
new file mode 100644
index 0000000..2ee6a55
--- /dev/null
+++ b/ProjectTank/ProjectTank/Exceptions/CollectionOverflowException.cs
@@ -0,0 +1,20 @@
+using System.Runtime.Serialization;
+
+namespace ProjectTank.Exceptions;
+
+///
+/// Класс, описывающий ошибку переполнения коллекции
+///
+[Serializable]
+internal class CollectionOverflowException : ApplicationException
+{
+ public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { }
+
+ public CollectionOverflowException() : base() { }
+
+ public CollectionOverflowException(string message) : base(message) { }
+
+ public CollectionOverflowException(string message, Exception exception) : base(message, exception) { }
+
+ protected CollectionOverflowException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/Exceptions/ObjectNotFoundException.cs b/ProjectTank/ProjectTank/Exceptions/ObjectNotFoundException.cs
new file mode 100644
index 0000000..5050636
--- /dev/null
+++ b/ProjectTank/ProjectTank/Exceptions/ObjectNotFoundException.cs
@@ -0,0 +1,20 @@
+using System.Runtime.Serialization;
+
+namespace ProjectTank.Exceptions;
+
+///
+/// Класс, описывающий ошибку, что по указанной позиции нет элемента
+///
+[Serializable]
+internal class ObjectNotFoundException : ApplicationException
+{
+ public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i) { }
+
+ public ObjectNotFoundException() : base() { }
+
+ public ObjectNotFoundException(string message) : base(message) { }
+
+ public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { }
+
+ protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/Exceptions/PositionOutOfCollectionException.cs b/ProjectTank/ProjectTank/Exceptions/PositionOutOfCollectionException.cs
new file mode 100644
index 0000000..09d1e0e
--- /dev/null
+++ b/ProjectTank/ProjectTank/Exceptions/PositionOutOfCollectionException.cs
@@ -0,0 +1,20 @@
+using System.Runtime.Serialization;
+
+namespace ProjectTank.Exceptions;
+
+///
+/// Класс, описывающий ошибку выхода за границы коллекции
+///
+[Serializable]
+internal class PositionOutOfCollectionException : ApplicationException
+{
+ public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции. Позиция " + i) { }
+
+ public PositionOutOfCollectionException() : base() { }
+
+ public PositionOutOfCollectionException(string message) : base(message) { }
+
+ public PositionOutOfCollectionException(string message, Exception exception) : base(message, exception) { }
+
+ protected PositionOutOfCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
+}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/FormTankCollection.Designer.cs b/ProjectTank/ProjectTank/FormTankCollection.Designer.cs
index af37bbc..30cc63e 100644
--- a/ProjectTank/ProjectTank/FormTankCollection.Designer.cs
+++ b/ProjectTank/ProjectTank/FormTankCollection.Designer.cs
@@ -68,9 +68,9 @@ namespace ProjectTank
groupBoxTools.Controls.Add(panelStorage);
groupBoxTools.Controls.Add(comboBoxSelectorCompany);
groupBoxTools.Dock = DockStyle.Right;
- groupBoxTools.Location = new Point(931, 28);
+ groupBoxTools.Location = new Point(979, 30);
groupBoxTools.Name = "groupBoxTools";
- groupBoxTools.Size = new Size(218, 659);
+ groupBoxTools.Size = new Size(218, 769);
groupBoxTools.TabIndex = 0;
groupBoxTools.TabStop = false;
groupBoxTools.Text = "Инструменты";
@@ -84,7 +84,7 @@ namespace ProjectTank
panelCompanyTools.Controls.Add(buttonGoToCheck);
panelCompanyTools.Dock = DockStyle.Bottom;
panelCompanyTools.Enabled = false;
- panelCompanyTools.Location = new Point(3, 379);
+ panelCompanyTools.Location = new Point(3, 489);
panelCompanyTools.Name = "panelCompanyTools";
panelCompanyTools.Size = new Size(212, 277);
panelCompanyTools.TabIndex = 9;
@@ -103,7 +103,7 @@ namespace ProjectTank
// buttonRefresh
//
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonRefresh.Location = new Point(4, 225);
+ buttonRefresh.Location = new Point(5, 225);
buttonRefresh.Name = "buttonRefresh";
buttonRefresh.Size = new Size(202, 49);
buttonRefresh.TabIndex = 6;
@@ -114,7 +114,7 @@ namespace ProjectTank
// maskedTextBox
//
maskedTextBox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- maskedTextBox.Location = new Point(4, 87);
+ maskedTextBox.Location = new Point(5, 87);
maskedTextBox.Mask = "00";
maskedTextBox.Name = "maskedTextBox";
maskedTextBox.Size = new Size(202, 27);
@@ -126,7 +126,7 @@ namespace ProjectTank
buttonAddTank.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
buttonAddTank.Location = new Point(3, 3);
buttonAddTank.Name = "buttonAddTank";
- buttonAddTank.Size = new Size(205, 49);
+ buttonAddTank.Size = new Size(204, 49);
buttonAddTank.TabIndex = 1;
buttonAddTank.Text = "Добавление бронированной машины";
buttonAddTank.UseVisualStyleBackColor = true;
@@ -147,7 +147,7 @@ namespace ProjectTank
//
buttonCreateCompany.Location = new Point(6, 339);
buttonCreateCompany.Name = "buttonCreateCompany";
- buttonCreateCompany.Size = new Size(206, 34);
+ buttonCreateCompany.Size = new Size(206, 35);
buttonCreateCompany.TabIndex = 8;
buttonCreateCompany.Text = "Создать компанию";
buttonCreateCompany.UseVisualStyleBackColor = true;
@@ -200,7 +200,7 @@ namespace ProjectTank
// radioButtonList
//
radioButtonList.AutoSize = true;
- radioButtonList.Location = new Point(106, 66);
+ radioButtonList.Location = new Point(106, 67);
radioButtonList.Name = "radioButtonList";
radioButtonList.Size = new Size(80, 24);
radioButtonList.TabIndex = 3;
@@ -211,7 +211,7 @@ namespace ProjectTank
// radioButtonMassive
//
radioButtonMassive.AutoSize = true;
- radioButtonMassive.Location = new Point(18, 66);
+ radioButtonMassive.Location = new Point(18, 67);
radioButtonMassive.Name = "radioButtonMassive";
radioButtonMassive.Size = new Size(82, 24);
radioButtonMassive.TabIndex = 2;
@@ -229,7 +229,7 @@ namespace ProjectTank
// labelCollectionName
//
labelCollectionName.AutoSize = true;
- labelCollectionName.Location = new Point(27, 10);
+ labelCollectionName.Location = new Point(27, 11);
labelCollectionName.Name = "labelCollectionName";
labelCollectionName.Size = new Size(158, 20);
labelCollectionName.TabIndex = 0;
@@ -250,9 +250,9 @@ namespace ProjectTank
// pictureBox
//
pictureBox.Dock = DockStyle.Fill;
- pictureBox.Location = new Point(0, 28);
+ pictureBox.Location = new Point(0, 30);
pictureBox.Name = "pictureBox";
- pictureBox.Size = new Size(931, 659);
+ pictureBox.Size = new Size(979, 769);
pictureBox.TabIndex = 1;
pictureBox.TabStop = false;
//
@@ -262,7 +262,8 @@ namespace ProjectTank
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
- menuStrip.Size = new Size(1149, 28);
+ menuStrip.Padding = new Padding(6, 3, 0, 3);
+ menuStrip.Size = new Size(1197, 30);
menuStrip.TabIndex = 6;
menuStrip.Text = "menuStrip1";
//
@@ -301,7 +302,7 @@ namespace ProjectTank
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(1149, 687);
+ ClientSize = new Size(1197, 799);
Controls.Add(pictureBox);
Controls.Add(groupBoxTools);
Controls.Add(menuStrip);
diff --git a/ProjectTank/ProjectTank/FormTankCollection.cs b/ProjectTank/ProjectTank/FormTankCollection.cs
index 229f4d5..a9d71f5 100644
--- a/ProjectTank/ProjectTank/FormTankCollection.cs
+++ b/ProjectTank/ProjectTank/FormTankCollection.cs
@@ -1,5 +1,16 @@
-using ProjectTank.CollectionGenericObjects;
+using Microsoft.Extensions.Logging;
+using ProjectTank.CollectionGenericObjects;
using ProjectTank.Drawnings;
+using ProjectTank.Exceptions;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
namespace ProjectTank;
@@ -9,24 +20,29 @@ namespace ProjectTank;
public partial class FormTankCollection : Form
{
///
- /// Хранилише коллекций
- ///
- private readonly StorageCollection _storageCollection;
+ /// Хранилише коллекций
+ ///
+ private readonly StorageCollection _storageCollection;
///
/// Компания
///
private AbstractCompany? _company = null;
+ ///
+ /// Логер
+ ///
+ private readonly ILogger _logger;
+
///
/// Конструктор
///
- public FormTankCollection()
+ public FormTankCollection(ILogger logger)
{
InitializeComponent();
_storageCollection = new();
+ _logger = logger;
}
-
///
/// Выбор компании
///
@@ -44,10 +60,9 @@ public partial class FormTankCollection : Form
///
public void ButtonAddTank_Click(object sender, EventArgs e)
{
-
- FormTankConfig form = new();
- form.AddEvent(SetMachine);
+ FormTankConfig form = new FormTankConfig();
form.Show();
+ form.AddEvent(SetMachine);
}
///
@@ -60,14 +75,18 @@ public partial class FormTankCollection : Form
{
return;
}
- if (_company + tank2 != -1)
+ try
{
+ var res = _company + tank2;
MessageBox.Show("Объект добавлен");
+ _logger.LogInformation($"Объект добавлен под индексом {res}");
pictureBox.Image = _company.Show();
}
- else
+ catch (CollectionOverflowException ex)
{
- MessageBox.Show("Не удалось добавить объект");
+ MessageBox.Show($"Объект не добавлен: {ex.Message}", "Результат", MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ _logger.LogError($"Ошибка: {ex.Message}", ex.Message);
}
@@ -85,21 +104,27 @@ public partial class FormTankCollection : Form
return;
}
- if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
+ if (MessageBox.Show("Удалить объект?", "Удаление",
+ MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
return;
}
int pos = Convert.ToInt32(maskedTextBox.Text);
- if (_company - pos != null)
+ try
{
+ var res = _company - pos;
MessageBox.Show("Объект удален");
+ _logger.LogInformation($"Объект удален под индексом {pos}");
pictureBox.Image = _company.Show();
}
- else
+ catch (Exception ex)
{
- MessageBox.Show("Не удалось удалить объект");
+ MessageBox.Show(ex.Message, "Не удалось удалить объект",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError($"Ошибка: {ex.Message}", ex.Message);
}
+
}
///
@@ -109,33 +134,35 @@ public partial class FormTankCollection : Form
///
private void ButtonGoToCheck_Click(object sender, EventArgs e)
{
- if (_company == null)
{
- return;
- }
-
- DrawningTank2? tank = null;
- int counter = 100;
- while (tank == null)
- {
- tank = _company.GetRandomObject();
- counter--;
- if (counter <= 0)
+ if (_company == null)
{
- break;
+ return;
}
- }
- if (tank == null)
- {
- return;
- }
+ DrawningTank2? tank = null;
+ int counter = 100;
+ while (tank == null)
+ {
+ tank = _company.GetRandomObject();
+ counter--;
+ if (counter <= 0)
+ {
+ break;
+ }
+ }
- FormTank form = new()
- {
- SetTank = tank
- };
- form.ShowDialog();
+ if (tank == null)
+ {
+ return;
+ }
+
+ FormTank form = new()
+ {
+ SetTank = tank
+ };
+ form.ShowDialog();
+ }
}
///
@@ -163,6 +190,7 @@ public partial class FormTankCollection : Form
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
{
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Не заполненная коллекция");
return;
}
@@ -177,6 +205,7 @@ public partial class FormTankCollection : Form
}
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
+ _logger.LogInformation($"Добавлена коллекция: {textBoxCollectionName.Text}");
RerfreshListBoxItems();
}
@@ -191,13 +220,16 @@ public partial class FormTankCollection : Form
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
+ _logger.LogError("Удаление невыбранной коллекции");
return;
}
+ string name = listBoxCollection.SelectedItem.ToString() ?? string.Empty;
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
+ _logger.LogInformation($"Удалена коллекция: {name}");
RerfreshListBoxItems();
}
@@ -228,6 +260,7 @@ public partial class FormTankCollection : Form
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
+ _logger.LogError("Создание компании невыбранной коллекции");
return;
}
@@ -235,9 +268,11 @@ public partial class FormTankCollection : Form
if (collection == null)
{
MessageBox.Show("Коллекция не проинициализирована");
+ _logger.LogError("Не удалось инициализировать коллекцию");
return;
}
+
switch (comboBoxSelectorCompany.Text)
{
case "Хранилище":
@@ -257,13 +292,16 @@ public partial class FormTankCollection : Form
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
- if (_storageCollection.SaveData(saveFileDialog.FileName))
+ try
{
+ _storageCollection.SaveData(saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName);
}
- else
+ catch (Exception ex)
{
- MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Ошибка: {Message}", ex.Message);
}
}
@@ -279,16 +317,17 @@ public partial class FormTankCollection : Form
// TODO продумать логику
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
- if (_storageCollection.LoadData(openFileDialog.FileName))
+ try
{
- MessageBox.Show("Загрузка прошла успешно",
- "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _storageCollection.LoadData(openFileDialog.FileName);
+ MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _logger.LogInformation("Загрузка из файла: {filename}", openFileDialog.FileName);
RerfreshListBoxItems();
}
- else
+ catch (Exception ex)
{
- MessageBox.Show("Не сохранилось", "Результат",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogError("Ошибка: {Message}", ex.Message);
}
}
}
diff --git a/ProjectTank/ProjectTank/FormTankConfig.Designer.cs b/ProjectTank/ProjectTank/FormTankConfig.Designer.cs
index 1c64504..7d7d801 100644
--- a/ProjectTank/ProjectTank/FormTankConfig.Designer.cs
+++ b/ProjectTank/ProjectTank/FormTankConfig.Designer.cs
@@ -77,8 +77,10 @@ namespace ProjectTank
groupBoxConfig.Controls.Add(labelSimpleObject);
groupBoxConfig.Dock = DockStyle.Left;
groupBoxConfig.Location = new Point(0, 0);
+ groupBoxConfig.Margin = new Padding(3, 2, 3, 2);
groupBoxConfig.Name = "groupBoxConfig";
- groupBoxConfig.Size = new Size(630, 274);
+ groupBoxConfig.Padding = new Padding(3, 2, 3, 2);
+ groupBoxConfig.Size = new Size(551, 249);
groupBoxConfig.TabIndex = 0;
groupBoxConfig.TabStop = false;
groupBoxConfig.Text = "Параметры";
@@ -93,9 +95,11 @@ namespace ProjectTank
groupBoxColors.Controls.Add(panelBlue);
groupBoxColors.Controls.Add(panelGreen);
groupBoxColors.Controls.Add(panelRed);
- groupBoxColors.Location = new Point(308, 12);
+ groupBoxColors.Location = new Point(270, 9);
+ groupBoxColors.Margin = new Padding(3, 2, 3, 2);
groupBoxColors.Name = "groupBoxColors";
- groupBoxColors.Size = new Size(293, 143);
+ groupBoxColors.Padding = new Padding(3, 2, 3, 2);
+ groupBoxColors.Size = new Size(256, 107);
groupBoxColors.TabIndex = 8;
groupBoxColors.TabStop = false;
groupBoxColors.Text = "Цвета";
@@ -103,73 +107,82 @@ namespace ProjectTank
// panelGray
//
panelGray.BackColor = Color.Gray;
- panelGray.Location = new Point(85, 81);
+ panelGray.Location = new Point(74, 61);
+ panelGray.Margin = new Padding(3, 2, 3, 2);
panelGray.Name = "panelGray";
- panelGray.Size = new Size(49, 45);
+ panelGray.Size = new Size(43, 34);
panelGray.TabIndex = 7;
//
// panelBlack
//
panelBlack.BackColor = Color.Black;
- panelBlack.Location = new Point(151, 81);
+ panelBlack.Location = new Point(132, 61);
+ panelBlack.Margin = new Padding(3, 2, 3, 2);
panelBlack.Name = "panelBlack";
- panelBlack.Size = new Size(49, 45);
+ panelBlack.Size = new Size(43, 34);
panelBlack.TabIndex = 6;
//
// panelPurple
//
panelPurple.BackColor = Color.Purple;
- panelPurple.Location = new Point(220, 81);
+ panelPurple.Location = new Point(192, 61);
+ panelPurple.Margin = new Padding(3, 2, 3, 2);
panelPurple.Name = "panelPurple";
- panelPurple.Size = new Size(49, 45);
+ panelPurple.Size = new Size(43, 34);
panelPurple.TabIndex = 5;
//
// panelWhite
//
panelWhite.BackColor = Color.White;
- panelWhite.Location = new Point(16, 81);
+ panelWhite.Location = new Point(14, 61);
+ panelWhite.Margin = new Padding(3, 2, 3, 2);
panelWhite.Name = "panelWhite";
- panelWhite.Size = new Size(49, 45);
+ panelWhite.Size = new Size(43, 34);
panelWhite.TabIndex = 4;
//
// panelYellow
//
panelYellow.BackColor = Color.Yellow;
- panelYellow.Location = new Point(220, 26);
+ panelYellow.Location = new Point(192, 20);
+ panelYellow.Margin = new Padding(3, 2, 3, 2);
panelYellow.Name = "panelYellow";
- panelYellow.Size = new Size(49, 45);
+ panelYellow.Size = new Size(43, 34);
panelYellow.TabIndex = 3;
//
// panelBlue
//
panelBlue.BackColor = Color.Blue;
- panelBlue.Location = new Point(151, 26);
+ panelBlue.Location = new Point(132, 20);
+ panelBlue.Margin = new Padding(3, 2, 3, 2);
panelBlue.Name = "panelBlue";
- panelBlue.Size = new Size(49, 45);
+ panelBlue.Size = new Size(43, 34);
panelBlue.TabIndex = 2;
//
// panelGreen
//
panelGreen.BackColor = Color.Green;
- panelGreen.Location = new Point(85, 26);
+ panelGreen.Location = new Point(74, 20);
+ panelGreen.Margin = new Padding(3, 2, 3, 2);
panelGreen.Name = "panelGreen";
- panelGreen.Size = new Size(49, 45);
+ panelGreen.Size = new Size(43, 34);
panelGreen.TabIndex = 1;
//
// panelRed
//
panelRed.BackColor = Color.Red;
- panelRed.Location = new Point(16, 26);
+ panelRed.Location = new Point(14, 20);
+ panelRed.Margin = new Padding(3, 2, 3, 2);
panelRed.Name = "panelRed";
- panelRed.Size = new Size(49, 45);
+ panelRed.Size = new Size(43, 34);
panelRed.TabIndex = 0;
//
// checkBoxGunTurret
//
checkBoxGunTurret.AutoSize = true;
- checkBoxGunTurret.Location = new Point(6, 114);
+ checkBoxGunTurret.Location = new Point(5, 86);
+ checkBoxGunTurret.Margin = new Padding(3, 2, 3, 2);
checkBoxGunTurret.Name = "checkBoxGunTurret";
- checkBoxGunTurret.Size = new Size(299, 24);
+ checkBoxGunTurret.Size = new Size(237, 19);
checkBoxGunTurret.TabIndex = 9;
checkBoxGunTurret.Text = "Признак наличия зенитного пулемёта";
checkBoxGunTurret.UseVisualStyleBackColor = true;
@@ -177,57 +190,60 @@ namespace ProjectTank
// checkBoxMachineGun
//
checkBoxMachineGun.AutoSize = true;
- checkBoxMachineGun.Location = new Point(6, 144);
+ checkBoxMachineGun.Location = new Point(5, 108);
+ checkBoxMachineGun.Margin = new Padding(3, 2, 3, 2);
checkBoxMachineGun.Name = "checkBoxMachineGun";
- checkBoxMachineGun.Size = new Size(281, 24);
+ checkBoxMachineGun.Size = new Size(224, 19);
checkBoxMachineGun.TabIndex = 8;
checkBoxMachineGun.Text = "Признак наличия башни с орудием";
checkBoxMachineGun.UseVisualStyleBackColor = true;
//
// numericUpDownWeight
//
- numericUpDownWeight.Location = new Point(94, 70);
+ numericUpDownWeight.Location = new Point(82, 52);
+ numericUpDownWeight.Margin = new Padding(3, 2, 3, 2);
numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownWeight.Name = "numericUpDownWeight";
- numericUpDownWeight.Size = new Size(119, 27);
+ numericUpDownWeight.Size = new Size(104, 23);
numericUpDownWeight.TabIndex = 5;
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// labelWeight
//
labelWeight.AutoSize = true;
- labelWeight.Location = new Point(12, 72);
+ labelWeight.Location = new Point(10, 54);
labelWeight.Name = "labelWeight";
- labelWeight.Size = new Size(36, 20);
+ labelWeight.Size = new Size(29, 15);
labelWeight.TabIndex = 4;
labelWeight.Text = "Вес:";
//
// numericUpDownSpeed
//
- numericUpDownSpeed.Location = new Point(94, 32);
+ numericUpDownSpeed.Location = new Point(82, 24);
+ numericUpDownSpeed.Margin = new Padding(3, 2, 3, 2);
numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownSpeed.Name = "numericUpDownSpeed";
- numericUpDownSpeed.Size = new Size(119, 27);
+ numericUpDownSpeed.Size = new Size(104, 23);
numericUpDownSpeed.TabIndex = 3;
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// labelSpeed
//
labelSpeed.AutoSize = true;
- labelSpeed.Location = new Point(12, 34);
+ labelSpeed.Location = new Point(10, 26);
labelSpeed.Name = "labelSpeed";
- labelSpeed.Size = new Size(76, 20);
+ labelSpeed.Size = new Size(62, 15);
labelSpeed.TabIndex = 2;
labelSpeed.Text = "Скорость:";
//
// labelModifiedObject
//
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
- labelModifiedObject.Location = new Point(457, 161);
+ labelModifiedObject.Location = new Point(400, 121);
labelModifiedObject.Name = "labelModifiedObject";
- labelModifiedObject.Size = new Size(144, 39);
+ labelModifiedObject.Size = new Size(126, 30);
labelModifiedObject.TabIndex = 1;
labelModifiedObject.Text = "Продвинутый";
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
@@ -236,9 +252,9 @@ namespace ProjectTank
// labelSimpleObject
//
labelSimpleObject.BorderStyle = BorderStyle.FixedSingle;
- labelSimpleObject.Location = new Point(308, 161);
+ labelSimpleObject.Location = new Point(270, 121);
labelSimpleObject.Name = "labelSimpleObject";
- labelSimpleObject.Size = new Size(138, 39);
+ labelSimpleObject.Size = new Size(121, 30);
labelSimpleObject.TabIndex = 0;
labelSimpleObject.Text = "Простой";
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
@@ -246,17 +262,19 @@ namespace ProjectTank
//
// pictureBoxObject
//
- pictureBoxObject.Location = new Point(19, 65);
+ pictureBoxObject.Location = new Point(17, 49);
+ pictureBoxObject.Margin = new Padding(3, 2, 3, 2);
pictureBoxObject.Name = "pictureBoxObject";
- pictureBoxObject.Size = new Size(222, 152);
+ pictureBoxObject.Size = new Size(217, 133);
pictureBoxObject.TabIndex = 1;
pictureBoxObject.TabStop = false;
//
// buttonAdd
//
- buttonAdd.Location = new Point(655, 233);
+ buttonAdd.Location = new Point(559, 206);
+ buttonAdd.Margin = new Padding(3, 2, 3, 2);
buttonAdd.Name = "buttonAdd";
- buttonAdd.Size = new Size(94, 29);
+ buttonAdd.Size = new Size(121, 23);
buttonAdd.TabIndex = 2;
buttonAdd.Text = "Добавить";
buttonAdd.UseVisualStyleBackColor = true;
@@ -264,9 +282,10 @@ namespace ProjectTank
//
// buttonCancel
//
- buttonCancel.Location = new Point(784, 233);
+ buttonCancel.Location = new Point(700, 206);
+ buttonCancel.Margin = new Padding(3, 2, 3, 2);
buttonCancel.Name = "buttonCancel";
- buttonCancel.Size = new Size(94, 29);
+ buttonCancel.Size = new Size(109, 23);
buttonCancel.TabIndex = 3;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
@@ -277,9 +296,10 @@ namespace ProjectTank
panelObject.Controls.Add(labelAdditionalColor);
panelObject.Controls.Add(labelBodyColor);
panelObject.Controls.Add(pictureBoxObject);
- panelObject.Location = new Point(636, 7);
+ panelObject.Location = new Point(556, 5);
+ panelObject.Margin = new Padding(3, 2, 3, 2);
panelObject.Name = "panelObject";
- panelObject.Size = new Size(258, 220);
+ panelObject.Size = new Size(253, 197);
panelObject.TabIndex = 4;
panelObject.DragDrop += PanelObject_DragDrop;
panelObject.DragEnter += PanelObject_DragEnter;
@@ -288,9 +308,9 @@ namespace ProjectTank
//
labelAdditionalColor.AllowDrop = true;
labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
- labelAdditionalColor.Location = new Point(148, 13);
+ labelAdditionalColor.Location = new Point(139, 12);
labelAdditionalColor.Name = "labelAdditionalColor";
- labelAdditionalColor.Size = new Size(93, 39);
+ labelAdditionalColor.Size = new Size(95, 30);
labelAdditionalColor.TabIndex = 12;
labelAdditionalColor.Text = "Доп. цвет";
labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter;
@@ -301,9 +321,9 @@ namespace ProjectTank
//
labelBodyColor.AllowDrop = true;
labelBodyColor.BorderStyle = BorderStyle.FixedSingle;
- labelBodyColor.Location = new Point(19, 13);
+ labelBodyColor.Location = new Point(17, 12);
labelBodyColor.Name = "labelBodyColor";
- labelBodyColor.Size = new Size(93, 39);
+ labelBodyColor.Size = new Size(99, 30);
labelBodyColor.TabIndex = 11;
labelBodyColor.Text = "Цвет";
labelBodyColor.TextAlign = ContentAlignment.MiddleCenter;
@@ -312,13 +332,14 @@ namespace ProjectTank
//
// FormTankConfig
//
- AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(900, 274);
+ ClientSize = new Size(821, 249);
Controls.Add(panelObject);
Controls.Add(buttonCancel);
Controls.Add(buttonAdd);
Controls.Add(groupBoxConfig);
+ Margin = new Padding(3, 2, 3, 2);
Name = "FormTankConfig";
Text = "Создание объекта";
groupBoxConfig.ResumeLayout(false);
diff --git a/ProjectTank/ProjectTank/Program.cs b/ProjectTank/ProjectTank/Program.cs
index 7cb3cff..197ff79 100644
--- a/ProjectTank/ProjectTank/Program.cs
+++ b/ProjectTank/ProjectTank/Program.cs
@@ -1,20 +1,49 @@
-using System.Drawing;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Configuration;
+using Serilog;
+using System;
+using ProjectTank;
namespace ProjectTank
{
internal static class Program
{
///
- /// The main entry point for the application.
- ///
+ /// The main entry point for the application.
+ ///
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
- Application.Run(new FormTankCollection());
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ using (ServiceProvider serviceProvider = services.BuildServiceProvider())
+ {
+ Application.Run(serviceProvider.GetRequiredService());
+ }
+ }
+
+ private static void ConfigureServices(ServiceCollection services)
+ {
+ services.AddSingleton().AddLogging(option =>
+ {
+ string[] path = Directory.GetCurrentDirectory().Split('\\');
+ string pathNeed = "";
+ for (int i = 0; i < path.Length - 3; i++)
+ {
+ pathNeed += path[i] + "\\";
+ }
+
+ var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile(path: $"{pathNeed}serilog.json", optional: false, reloadOnChange: true)
+ .Build();
+ var logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger();
+ option.SetMinimumLevel(LogLevel.Information);
+ option.AddSerilog(logger);
+ });
}
}
-
}
\ No newline at end of file
diff --git a/ProjectTank/ProjectTank/ProjectTank.csproj b/ProjectTank/ProjectTank/ProjectTank.csproj
index 13ee123..3ed2190 100644
--- a/ProjectTank/ProjectTank/ProjectTank.csproj
+++ b/ProjectTank/ProjectTank/ProjectTank.csproj
@@ -8,6 +8,18 @@
enable
+
+
+
+
+
+
+
+
+
+
+
+
True
diff --git a/ProjectTank/ProjectTank/serilog.json b/ProjectTank/ProjectTank/serilog.json
new file mode 100644
index 0000000..d244240
--- /dev/null
+++ b/ProjectTank/ProjectTank/serilog.json
@@ -0,0 +1,20 @@
+{
+ "Serilog": {
+ "Using": [ "Serilog.Sinks.File" ],
+ "MinimumLevel": "Information",
+ "WriteTo": [
+ {
+ "Name": "File",
+ "Args": {
+ "path": "Logs/log_.log",
+ "rollingInterval": "Day",
+ "outputTemplate": "[{Timestamp:HH:mm:ss.fff}]{Level:u4}: {Message:lj}{NewLine}{Exception}"
+ }
+ }
+ ],
+ "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
+ "Properties": {
+ "Application": "Tank"
+ }
+ }
+}
\ No newline at end of file