diff --git a/COP_1/Album.cs b/COP_1/Album.cs
new file mode 100644
index 0000000..69af72a
--- /dev/null
+++ b/COP_1/Album.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace COP_1
+{
+ public class Album
+ {
+ public string Title { get; set; }
+ public string Performer { get; set; }
+ public string Genre { get; set; }
+ public string Year { get; set; }
+
+ public Album(string title, string performer, string genre, string year)
+ {
+ Title = title;
+ Performer = performer;
+ Genre = genre;
+ Year = year;
+ }
+
+ public Album() { }
+
+ public override string ToString()
+ {
+ string temp = Title + ", " + Performer + ", " + Genre + ", " + Year;
+ return temp;
+ //return (Title+", "+Performer+", "+Genre+", "+Year);
+ }
+ }
+}
diff --git a/COP_1/COP_1.csproj b/COP_1/COP_1.csproj
new file mode 100644
index 0000000..75cc2b7
--- /dev/null
+++ b/COP_1/COP_1.csproj
@@ -0,0 +1,16 @@
+
+
+
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
+
+
diff --git a/COP_1/COP_1.sln b/COP_1/COP_1.sln
new file mode 100644
index 0000000..80ed057
--- /dev/null
+++ b/COP_1/COP_1.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.8.34525.116
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "COP_1", "COP_1.csproj", "{41597675-2261-45D0-B8A3-F6C00D687FDC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "COP_1Test", "..\COP_1Test\COP_1Test.csproj", "{3926A945-603A-4E7F-B674-2240C8B5B794}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {41597675-2261-45D0-B8A3-F6C00D687FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {41597675-2261-45D0-B8A3-F6C00D687FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {41597675-2261-45D0-B8A3-F6C00D687FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {41597675-2261-45D0-B8A3-F6C00D687FDC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3926A945-603A-4E7F-B674-2240C8B5B794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3926A945-603A-4E7F-B674-2240C8B5B794}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3926A945-603A-4E7F-B674-2240C8B5B794}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3926A945-603A-4E7F-B674-2240C8B5B794}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {44FCB702-AF4F-4B33-B037-E657C1CC86F4}
+ EndGlobalSection
+EndGlobal
diff --git a/COP_1/cop_1/DropDownList.Designer.cs b/COP_1/cop_1/DropDownList.Designer.cs
new file mode 100644
index 0000000..91ee4c3
--- /dev/null
+++ b/COP_1/cop_1/DropDownList.Designer.cs
@@ -0,0 +1,72 @@
+namespace COP_1
+{
+ partial class DropDownList
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ comboBox = new ComboBox();
+ label1 = new Label();
+ SuspendLayout();
+ //
+ // comboBox
+ //
+ comboBox.Dock = DockStyle.Bottom;
+ comboBox.FormattingEnabled = true;
+ comboBox.Location = new Point(0, 22);
+ comboBox.Name = "comboBox";
+ comboBox.Size = new Size(225, 28);
+ comboBox.TabIndex = 1;
+ comboBox.SelectedValueChanged += comboBox_SelectedValueChanged;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Dock = DockStyle.Bottom;
+ label1.Location = new Point(0, 2);
+ label1.Name = "label1";
+ label1.Size = new Size(156, 20);
+ label1.TabIndex = 2;
+ label1.Text = "Выпадающий список";
+ //
+ // DropDownList
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(label1);
+ Controls.Add(comboBox);
+ Name = "DropDownList";
+ Size = new Size(225, 50);
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private ComboBox comboBox;
+ private Label label1;
+ }
+}
diff --git a/COP_1/cop_1/DropDownList.cs b/COP_1/cop_1/DropDownList.cs
new file mode 100644
index 0000000..83eceff
--- /dev/null
+++ b/COP_1/cop_1/DropDownList.cs
@@ -0,0 +1,68 @@
+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;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace COP_1
+{
+ public partial class DropDownList : UserControl
+ {
+ public DropDownList()
+ {
+ InitializeComponent();
+ }
+
+ //метод, у которого в передаваемых параметрах идет список строк и через этот список идет заполнение ComboBox;
+ public void AddingToList(List Values)
+ {
+ if (Values.Count == 0)
+ {
+ return;
+ }
+ comboBox.Items.AddRange(Values.ToArray());
+ }
+
+ //Отдельный публичный метод отчистки списка.
+ public void Clear()
+ {
+ comboBox.Items.Clear();
+ }
+
+ //публичное свойство(set, get) для установки и получения выбранного значения (возвращает пустую строку, если нет выбранного значения)
+ public string Selected
+ {
+ get
+ {
+ return comboBox.SelectedItem?.ToString() ?? string.Empty;
+ }
+ set
+ {
+ comboBox.SelectedItem = value;
+ }
+ }
+ //подписка(отписка) на изменения в ComboBox, и при изменении автоматически вызываются все обработчики, подписанные на описание события ExplicitEvent.
+ private EventHandler _explicitEvent;
+ public event EventHandler ExplicitEvent
+ {
+ add
+ {
+ _explicitEvent += value;
+ }
+ remove
+ {
+ _explicitEvent -= value;
+ }
+ }
+ //событие, вызываемое при смене значения в ComboBox.
+ private void comboBox_SelectedValueChanged(object sender, EventArgs e)
+ {
+ _explicitEvent?.Invoke(sender, e);
+ }
+ }
+}
diff --git a/COP_1/cop_1/DropDownList.resx b/COP_1/cop_1/DropDownList.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP_1/cop_1/DropDownList.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/COP_1/cop_1/EmailBox.cs b/COP_1/cop_1/EmailBox.cs
new file mode 100644
index 0000000..c82972f
--- /dev/null
+++ b/COP_1/cop_1/EmailBox.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace COP_1
+{
+ public partial class emailBox : UserControl
+ {
+ private string _pattern;
+ private string example = "example@gmail.com";
+ // Событие для обработки ошибок
+ private event Action? _errorOccurred;
+ // Свойство для хранения сообщения об ошибке
+ public string Error { get; private set; }
+
+ public string Pattern
+ {
+ get => _pattern;
+ set => _pattern = value;
+ }
+
+ // Публичное свойство для получения и установки значения текстового поля
+ public string? TextBoxValue
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(Pattern))
+ {
+ throw new ArgumentException("Invalid pattern format.", nameof(Pattern));
+ }
+
+ if (!IsValidEmail(textBox.Text))
+ {
+ throw new FormatException("Invalid email format.");
+ }
+
+ return textBox.Text == string.Empty ? null : textBox.Text;
+ }
+ set
+ {
+ if (IsValidEmail(value))
+ {
+ textBox.Text = value;
+ Error = string.Empty;
+ }
+ else
+ {
+ TriggerError("Invalid email format.");
+ }
+ }
+ }
+
+ // Tooltip для вывода примера
+ private void textBox_Enter(object sender, EventArgs e)
+ {
+ int visibleTime = 3000; // Время отображения в миллисекундах
+ ToolTip tt = new ToolTip();
+ tt.Show(example, textBox, 0, 20, visibleTime);
+ }
+
+ private EventHandler _explicitEvent;
+ public event EventHandler ExplicitEvent
+ {
+ add => _explicitEvent += value;
+ remove => _explicitEvent -= value;
+ }
+
+ public event Action AnErrorOccurred
+ {
+ add => _errorOccurred += value;
+ remove => _errorOccurred -= value;
+ }
+ public emailBox()
+ {
+ InitializeComponent();
+ Error = string.Empty;
+ }
+ // Событие при изменении текста
+ private void textBox_TextChanged(object sender, EventArgs e)
+ {
+ try
+ {
+ _explicitEvent?.Invoke(sender, e);
+ }
+ catch (Exception ex)
+ {
+ TriggerError(ex.Message);
+ }
+ }
+ private bool IsValidEmail(string email)
+ {
+ return !string.IsNullOrEmpty(Pattern) && Regex.IsMatch(email, Pattern);
+ }
+ // Метод для установки примера
+ public void SetExample(string str)
+ {
+ if (IsValidEmail(str))
+ {
+ example = str;
+ }
+ else
+ {
+ TriggerError("Invalid example format.");
+ }
+ }
+ // Метод для запуска события ошибки
+ private void TriggerError(string errorMessage)
+ {
+ Error = errorMessage;
+ _errorOccurred?.Invoke();
+ }
+ }
+}
diff --git a/COP_1/cop_1/ValuesList.Designer.cs b/COP_1/cop_1/ValuesList.Designer.cs
new file mode 100644
index 0000000..c59f6a4
--- /dev/null
+++ b/COP_1/cop_1/ValuesList.Designer.cs
@@ -0,0 +1,73 @@
+namespace COP_1
+{
+ partial class ValuesList
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ listBox = new ListBox();
+ label1 = new Label();
+ SuspendLayout();
+ //
+ // listBox
+ //
+ listBox.Dock = DockStyle.Bottom;
+ listBox.FormattingEnabled = true;
+ listBox.HorizontalScrollbar = true;
+ listBox.ItemHeight = 20;
+ listBox.Location = new Point(0, 21);
+ listBox.Name = "listBox";
+ listBox.Size = new Size(238, 104);
+ listBox.TabIndex = 0;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Dock = DockStyle.Bottom;
+ label1.Location = new Point(0, 1);
+ label1.Name = "label1";
+ label1.Size = new Size(130, 20);
+ label1.TabIndex = 1;
+ label1.Text = "Список значений";
+ //
+ // ValuesList
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(label1);
+ Controls.Add(listBox);
+ Name = "ValuesList";
+ Size = new Size(238, 125);
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private ListBox listBox;
+ private Label label1;
+ }
+}
diff --git a/COP_1/cop_1/ValuesList.cs b/COP_1/cop_1/ValuesList.cs
new file mode 100644
index 0000000..3eaf9de
--- /dev/null
+++ b/COP_1/cop_1/ValuesList.cs
@@ -0,0 +1,139 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace COP_1
+{
+ public partial class ValuesList : UserControl
+ {
+ private string template;
+ private string start;
+ private string end;
+
+ private event Action? _errorOccured;
+ public string Error { get; private set; }
+ public ValuesList()
+ {
+ InitializeComponent();
+ Error = string.Empty;
+ }
+ //Метод для установки информации о макетной строке и символах (стартового и конечного)
+ public void SetLayoutInfo(string layout, string startS, string endS)
+ {
+ if (layout == null || startS == null || endS == null)
+ {
+ return;
+ }
+ template = layout;
+ start = startS;
+ end = endS;
+ }
+
+ //св-во для получения и заполнения индекса выбранного элемента
+ public int SelectedIndex
+ {
+ get
+ {
+ return listBox.SelectedIndex;
+ }
+ set
+ {
+ listBox.SelectedIndex = value;
+ }
+ }
+
+ //Публичный параметризованный метод для получения объекта из выбранной строки(создать объект и через рефлексию заполнить свойства его).
+ public T GetObjectFromStr() where T : class, new()
+ {
+ if (listBox.SelectedIndex < 0)
+ {
+ return null;
+ }
+ string initString = listBox.SelectedItem.ToString();//изначальная строка, получаемая из листбокса
+ T curObject = new T();
+
+ string[] tempWords = template.Split(new[] { char.Parse(start), char.Parse(end) }, StringSplitOptions.RemoveEmptyEntries);//все слова в шаблонной строке
+
+ StringBuilder valuesString = new StringBuilder(initString);//воспользуемся stringbuilder, т.к. будем проводить операции со строкой
+
+ List replaceablePatterns = new(); //заменяемые слова шаблона(title, performer, genre, year)
+
+ foreach (var word in tempWords)
+ {
+ if (initString.Contains(word))
+ {
+ // Удаляем первое слово, остальные заменяем на символ конца
+ if (valuesString.ToString().StartsWith(word))
+ {
+ valuesString.Replace(word, string.Empty); // Удаляем первое слово
+ }
+ else
+ {
+ valuesString.Replace(word, end.ToString());
+ }
+ }
+ else
+ {
+ replaceablePatterns.Add(word);
+ }
+ }
+
+ string[] values = valuesString.ToString().Split(new[] { end }, StringSplitOptions.RemoveEmptyEntries);
+ StringBuilder result = new StringBuilder(template);
+ for (int j = 0; j < replaceablePatterns.Count; j++)
+ {
+ if (!string.IsNullOrEmpty(replaceablePatterns[j]))
+ {
+ result.Replace(replaceablePatterns[j], values[j]);
+ }
+ }
+
+ foreach (var property in typeof(T).GetProperties())
+ {
+ if (!property.CanWrite)
+ {
+ continue;
+ }
+
+ int startBorder = result.ToString().IndexOf(start);
+ int endBorder = result.ToString().IndexOf(end, startBorder + 1);
+ if (startBorder == -1 || endBorder == -1)
+ {
+ break;
+ }
+
+ string propertyValue = result.ToString(startBorder + 1, endBorder - startBorder - 1); //с какого символа и сколько смволов вперед
+ result.Remove(0, endBorder + 1);
+ property.SetValue(curObject, Convert.ChangeType(propertyValue, property.PropertyType));
+ }
+ return curObject;
+ }
+
+ public void AddInListBox(T dataObject, int rowIndex)
+ {
+ while (listBox.Items.Count <= rowIndex)
+ {
+ listBox.Items.Add(template);
+ }
+
+ string row = listBox.Items[rowIndex].ToString();
+ PropertyInfo[] properties = dataObject.GetType().GetProperties();
+ foreach (PropertyInfo property in properties)
+ {
+ if (property != null)
+ {
+ var propertyValue = property.GetValue(dataObject);
+ row = row.Replace($"{start}{property.Name}{end}", propertyValue.ToString());
+ listBox.Items[rowIndex] = row;
+ }
+ }
+ }
+ }
+}
diff --git a/COP_1/cop_1/ValuesList.resx b/COP_1/cop_1/ValuesList.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP_1/cop_1/ValuesList.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/COP_1/cop_1/emailBox.Designer.cs b/COP_1/cop_1/emailBox.Designer.cs
new file mode 100644
index 0000000..2a25a30
--- /dev/null
+++ b/COP_1/cop_1/emailBox.Designer.cs
@@ -0,0 +1,72 @@
+namespace COP_1
+{
+ partial class emailBox
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ textBox = new TextBox();
+ label1 = new Label();
+ SuspendLayout();
+ //
+ // textBox
+ //
+ textBox.Dock = DockStyle.Bottom;
+ textBox.Location = new Point(0, 23);
+ textBox.Name = "textBox";
+ textBox.Size = new Size(225, 27);
+ textBox.TabIndex = 2;
+ textBox.TextChanged += textBox_TextChanged;
+ textBox.Enter += textBox_Enter;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Dock = DockStyle.Bottom;
+ label1.Location = new Point(0, 3);
+ label1.Name = "label1";
+ label1.Size = new Size(168, 20);
+ label1.TabIndex = 3;
+ label1.Text = "Ввод и проверка email";
+ //
+ // emailBox
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(label1);
+ Controls.Add(textBox);
+ Name = "emailBox";
+ Size = new Size(225, 50);
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private TextBox textBox;
+ private Label label1;
+ }
+}
diff --git a/COP_1/cop_1/emailBox.resx b/COP_1/cop_1/emailBox.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP_1/cop_1/emailBox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/COP_1/cop_2/WordBigText.Designer.cs b/COP_1/cop_2/WordBigText.Designer.cs
new file mode 100644
index 0000000..cdbe1b1
--- /dev/null
+++ b/COP_1/cop_2/WordBigText.Designer.cs
@@ -0,0 +1,36 @@
+namespace COP_1.cop_2
+{
+ partial class WordBigText
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/COP_1/cop_2/WordBigText.cs b/COP_1/cop_2/WordBigText.cs
new file mode 100644
index 0000000..f0a0dff
--- /dev/null
+++ b/COP_1/cop_2/WordBigText.cs
@@ -0,0 +1,127 @@
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Wordprocessing;
+using DocumentFormat.OpenXml;
+using System.ComponentModel;
+using COP_1.cop_2.helpers;
+
+namespace COP_1.cop_2
+{
+ public partial class WordBigText : Component
+ {
+ private WordprocessingDocument? _wordDocument;
+ private Body? _docBody;
+
+ public WordBigText()
+ {
+ InitializeComponent();
+ }
+
+ public WordBigText(IContainer container)
+ {
+ container.Add(this);
+ InitializeComponent();
+ }
+
+ public void CreateWordText(WordBigTextInfo largeText)
+ {
+ if (string.IsNullOrEmpty(largeText.FilePath) || string.IsNullOrEmpty(largeText.Title) || !CheckData(largeText.Paragraphs))
+ {
+ throw new Exception("Не все данные заполнены");
+ }
+ _wordDocument = WordprocessingDocument.Create(largeText.FilePath, WordprocessingDocumentType.Document);
+
+ //вытаскиваем главную часть из вордовского документа
+ MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart();
+
+ mainPart.Document = new Document();
+
+ //генерируем тело основной части документа
+ _docBody = mainPart.Document.AppendChild(new Body());
+
+ _wordDocument.Dispose();
+
+ AddText(largeText);
+ }
+
+ private void AddText(WordBigTextInfo largeText)
+ {
+ using (var document = WordprocessingDocument.Open(largeText.FilePath, true))
+ {
+ var doc = document.MainDocumentPart.Document;
+ //Создание заголовка
+
+ ParagraphProperties paragraphProperties = new();
+
+ paragraphProperties.AppendChild(new Justification
+ {
+ Val = JustificationValues.Center
+ });
+
+ paragraphProperties.AppendChild(new Indentation());
+
+ Paragraph header = new();
+
+ header.AppendChild(paragraphProperties);
+
+ var docRun = new Run();
+
+ var properties = new RunProperties();
+
+ properties.AppendChild(new FontSize
+ {
+ Val = "48"
+ });
+
+ properties.AppendChild(new Bold());
+
+ docRun.AppendChild(properties);
+
+ docRun.AppendChild(new Text(largeText.Title));
+
+ header.AppendChild(docRun);
+ doc.Body.Append(header);
+
+ //Создание текста
+
+ for (int i = 0; i < largeText.Paragraphs.Length; i++)
+ {
+ ParagraphProperties paragraphProperties2 = new();
+
+ paragraphProperties2.AppendChild(new Justification
+ {
+ Val = JustificationValues.Both
+ });
+
+ paragraphProperties2.AppendChild(new Indentation());
+
+ Paragraph text = new();
+
+ text.AppendChild(paragraphProperties2);
+
+ var docRun2 = new Run();
+
+ var properties2 = new RunProperties();
+
+ properties2.AppendChild(new FontSize { Val = "24"});
+
+ docRun2.AppendChild(properties2);
+ docRun2.AppendChild(new Text(largeText.Paragraphs[i]));
+
+ text.AppendChild(docRun2);
+ doc.Body.Append(text);
+ }
+ doc.Save();
+ }
+ }
+
+ bool CheckData(string[] data)
+ {
+ for (int i = 0; i < data.Length; i++)
+ {
+ if (string.IsNullOrEmpty(data[i])) return false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/COP_1/cop_2/WordDiagram.Designer.cs b/COP_1/cop_2/WordDiagram.Designer.cs
new file mode 100644
index 0000000..d1819ad
--- /dev/null
+++ b/COP_1/cop_2/WordDiagram.Designer.cs
@@ -0,0 +1,36 @@
+namespace COP_1.cop_2
+{
+ partial class WordDiagram
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/COP_1/cop_2/WordDiagram.cs b/COP_1/cop_2/WordDiagram.cs
new file mode 100644
index 0000000..85cdbff
--- /dev/null
+++ b/COP_1/cop_2/WordDiagram.cs
@@ -0,0 +1,107 @@
+using Aspose.Words;
+using Aspose.Words.Drawing;
+using Aspose.Words.Drawing.Charts;
+using COP_1.cop_2.helpers;
+using System.ComponentModel;
+
+namespace COP_1.cop_2
+{
+ public partial class WordDiagram : Component
+ {
+ public WordDiagram()
+ {
+ InitializeComponent();
+ }
+
+ public WordDiagram(IContainer container)
+ {
+ container.Add(this);
+
+ InitializeComponent();
+ }
+
+ string[] cats;
+ string[] doubs;
+
+ public void AddDiagram(SimpleLineChart simpleLineChart)
+ {
+ if (!CheckData(simpleLineChart.DataList))
+ {
+ throw new Exception("Не данные заполнены");
+ }
+ Document doc = new Document();
+ DocumentBuilder builder = new DocumentBuilder(doc);
+
+ Aspose.Words.Font font = builder.Font;
+ font.Size = 24;
+ font.Bold = true;
+ font.Color = Color.Black;
+ font.Name = "Correction Tape";
+
+ ParagraphFormat paragraphFormat = builder.ParagraphFormat;
+ paragraphFormat.FirstLineIndent = 8;
+ paragraphFormat.SpaceAfter = 24;
+ paragraphFormat.Alignment = ParagraphAlignment.Center;
+ paragraphFormat.KeepTogether = true;
+
+ builder.Writeln(simpleLineChart.FileHeader);
+
+ Shape shape = builder.InsertChart(ChartType.Line, 500, 270);
+
+ Chart chart = shape.Chart;
+
+ chart.Title.Text = simpleLineChart.LineChartName;
+
+ ChartSeriesCollection seriesColl = chart.Series;
+
+ Console.WriteLine(seriesColl.Count);
+
+ seriesColl.Clear();
+ string[] cats;
+ double[] doubs;
+
+ foreach (var data in simpleLineChart.DataList)
+ {
+ cats = new string[simpleLineChart.DataList.Count];
+ doubs = new double[simpleLineChart.DataList.Count];
+ int i = 0;
+ foreach(var (name, value) in data.LineData)
+ {
+ cats[i] = name;
+ doubs[i] = value;
+ i++;
+ }
+
+ //var (name, values) = data.LineData;
+ seriesColl.Add(data.LineName, cats, doubs);
+ }
+
+ ChartLegend legend = chart.Legend;
+
+ legend.Position = (LegendPosition)simpleLineChart.AreaLegend;
+
+ legend.Overlay = true;
+
+ doc.Save(simpleLineChart.FilePath);
+ }
+ static bool CheckData(List data)
+ {
+ string[] cats = new string[data.Count];
+ double[] doubs = new double[data.Count];
+
+ foreach (var _data in data)
+ {
+ int i = 0;
+ foreach (var (name, value) in _data.LineData)
+ {
+ cats[i] = name;
+ doubs[i] = value;
+ i++;
+ }
+ if (string.IsNullOrEmpty(_data.LineName) || cats.Length == 0 || doubs.Length == 0)
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/COP_1/cop_2/WordTable.Designer.cs b/COP_1/cop_2/WordTable.Designer.cs
new file mode 100644
index 0000000..a66c210
--- /dev/null
+++ b/COP_1/cop_2/WordTable.Designer.cs
@@ -0,0 +1,36 @@
+namespace COP_1.cop_2
+{
+ partial class WordTable
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/COP_1/cop_2/WordTable.cs b/COP_1/cop_2/WordTable.cs
new file mode 100644
index 0000000..765a0c6
--- /dev/null
+++ b/COP_1/cop_2/WordTable.cs
@@ -0,0 +1,115 @@
+using System.ComponentModel;
+using System.Linq;
+using Aspose.Words;
+using Aspose.Words.Tables;
+using COP_1.cop_2.helpers;
+
+namespace COP_1.cop_2
+{
+ public partial class WordTable : Component
+ {
+ public WordTable()
+ {
+ InitializeComponent();
+ }
+
+ public WordTable(IContainer container)
+ {
+ container.Add(this);
+
+ InitializeComponent();
+ }
+
+ public void CreateTable(WordTableInfo tableWord) where T : class
+ {
+ // Проверка наличия данных и определений столбцов
+ if (tableWord.Items == null || tableWord.Items.Count == 0 || tableWord.ColumnParameters == null || tableWord.ColumnParameters.Count == 0)
+ {
+ throw new ArgumentException("Data or column definitions are null or empty");
+ }
+
+ // Проверка, что все ячейки шапки заполнены и для каждого столбца определено свойство/поле класса
+ foreach (var columnDefinition in tableWord.ColumnParameters)
+ {
+ if (string.IsNullOrEmpty(columnDefinition.PropertyName))
+ {
+ throw new ArgumentException($"Incomplete column definition: {columnDefinition.FirstRowHeader}");
+ }
+ }
+
+ // Создание документа
+ Document document = new Document();
+ DocumentBuilder builder = new DocumentBuilder(document);
+
+ // Установка стиля заголовка
+ Style titleStyle = builder.Document.Styles.Add(StyleType.Paragraph, "Title");
+ titleStyle.Font.Size = 16;
+ titleStyle.Font.Bold = true;
+
+ // Установка заголовка документа
+ builder.ParagraphFormat.Style = titleStyle;
+ builder.Writeln(tableWord.Title);
+
+ // Создание таблицы
+ Table table = builder.StartTable();
+
+ // Создание первой строки (заголовок)
+ foreach (var columnDefinition in tableWord.ColumnParameters)
+ {
+ builder.InsertCell();
+ builder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(columnDefinition.Width);
+ builder.Write(columnDefinition.FirstRowHeader);
+ }
+ // Создание второй строки (вторые заголовки)
+ builder.EndRow(); // Завершение первой строки заголовка
+ foreach (var columnDefinition in tableWord.ColumnParameters)
+ {
+ builder.InsertCell();
+ builder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(columnDefinition.Width);
+ builder.Write(columnDefinition.SecondRowHeader);
+ }
+ builder.EndRow();
+
+ int startCellIndex = -1;
+ int endCellIndex = -1;
+ // Объединение ячеек в первой строке шапки таблицы (если необходимо)
+ foreach (var mergedColumn in tableWord.MergedColumns)
+ {
+ startCellIndex = mergedColumn[0];
+ endCellIndex = mergedColumn[^1];
+
+ for (int i = startCellIndex; i <= endCellIndex; i++)
+ {
+ table.Rows[0].Cells[i].CellFormat.HorizontalMerge = i == startCellIndex ? CellMerge.First : CellMerge.Previous;
+ }
+ }
+
+ // Установка вертикального объединения заголовков
+ for (int columnIndex = 0; columnIndex < tableWord.ColumnParameters.Count; columnIndex++)
+ {
+ if (startCellIndex == columnIndex || endCellIndex == columnIndex)
+ continue;
+ table.Rows[0].Cells[columnIndex].CellFormat.VerticalMerge = CellMerge.First;
+ table.Rows[1].Cells[columnIndex].CellFormat.VerticalMerge = CellMerge.Previous;
+ }
+
+ // Вставка данных в таблицу
+ foreach (var item in tableWord.Items)
+ {
+ foreach (var columnDefinition in tableWord.ColumnParameters)
+ {
+ builder.InsertCell();
+ // Получение значения свойства/поля объекта по заданному имени
+ var propertyValue = item.GetType().GetProperty(columnDefinition.PropertyName)?.GetValue(item)?.ToString();
+ builder.Write(propertyValue ?? string.Empty);
+ }
+ builder.EndRow();
+ }
+
+ builder.EndTable();
+
+ // Сохранение документа в файл
+ document.Save(tableWord.FilePath);
+ }
+ }
+}
diff --git a/COP_1/cop_2/helpers/ColumnParams.cs b/COP_1/cop_2/helpers/ColumnParams.cs
new file mode 100644
index 0000000..8f399f9
--- /dev/null
+++ b/COP_1/cop_2/helpers/ColumnParams.cs
@@ -0,0 +1,11 @@
+namespace COP_1.cop_2.helpers
+{
+ public class ColumnParams
+ {
+ public string FirstRowHeader { get; set; } = string.Empty;
+ public string SecondRowHeader { get; set; } = string.Empty;
+ public string PropertyName { get; set; } = string.Empty;
+ public double Width { get; set; }
+ }
+}
+
diff --git a/COP_1/cop_2/helpers/DataLineChart.cs b/COP_1/cop_2/helpers/DataLineChart.cs
new file mode 100644
index 0000000..f1c5dac
--- /dev/null
+++ b/COP_1/cop_2/helpers/DataLineChart.cs
@@ -0,0 +1,15 @@
+namespace COP_1.cop_2.helpers
+{
+ public class DataLineChart
+ {
+ public string LineName { get; set; } = string.Empty;
+
+ public (string, double)[] LineData { get; set; }
+
+ public DataLineChart(string nameSeries, (string, double)[] lineData)
+ {
+ LineName = nameSeries;
+ LineData = lineData;
+ }
+ }
+}
diff --git a/COP_1/cop_2/helpers/SimpleLineChart.cs b/COP_1/cop_2/helpers/SimpleLineChart.cs
new file mode 100644
index 0000000..5292d18
--- /dev/null
+++ b/COP_1/cop_2/helpers/SimpleLineChart.cs
@@ -0,0 +1,26 @@
+using COP_1.cop_2.helpers.enums;
+
+namespace COP_1.cop_2.helpers
+{
+ public class SimpleLineChart
+ {
+ public string FilePath = string.Empty;
+
+ public string FileHeader = string.Empty;
+
+ public string LineChartName = string.Empty;
+
+ public EnumAreaLegend AreaLegend;
+
+ public List DataList = new();
+
+ public SimpleLineChart(string filePath, string fileHeader, string lineChartName, EnumAreaLegend areaLegend, List dataList)
+ {
+ FilePath = filePath;
+ FileHeader = fileHeader;
+ LineChartName = lineChartName;
+ AreaLegend = areaLegend;
+ DataList = dataList;
+ }
+ }
+}
diff --git a/COP_1/cop_2/helpers/WordBigTextInfo.cs b/COP_1/cop_2/helpers/WordBigTextInfo.cs
new file mode 100644
index 0000000..bca6e3f
--- /dev/null
+++ b/COP_1/cop_2/helpers/WordBigTextInfo.cs
@@ -0,0 +1,16 @@
+namespace COP_1.cop_2.helpers
+{
+ public class WordBigTextInfo
+ {
+ public string FilePath { get; set; } = string.Empty;
+ public string Title { get; set; } = string.Empty;
+ public string[] Paragraphs { get; set; } = Array.Empty();
+
+ public WordBigTextInfo(string filePath, string title, string[] paragraphs)
+ {
+ FilePath = filePath;
+ Title = title;
+ Paragraphs = paragraphs;
+ }
+ }
+}
diff --git a/COP_1/cop_2/helpers/WordTableInfo.cs b/COP_1/cop_2/helpers/WordTableInfo.cs
new file mode 100644
index 0000000..9d2fcd9
--- /dev/null
+++ b/COP_1/cop_2/helpers/WordTableInfo.cs
@@ -0,0 +1,24 @@
+namespace COP_1.cop_2.helpers
+{
+ public class WordTableInfo
+ {
+ public string FilePath { get; set; } = string.Empty;
+
+ public string Title { get; set; } = string.Empty;
+
+ public List ColumnParameters { get; set; } = new();
+
+ public List Items { get; set; } = new();
+
+ public List MergedColumns { get; set; } = new();
+
+ public WordTableInfo(string filePath, string title, List columnParameters, List data, List mergedColumns)
+ {
+ FilePath = filePath;
+ Title = title;
+ ColumnParameters = columnParameters;
+ Items = data;
+ MergedColumns = mergedColumns;
+ }
+ }
+}
diff --git a/COP_1/cop_2/helpers/enums/EnumAreaLegend.cs b/COP_1/cop_2/helpers/enums/EnumAreaLegend.cs
new file mode 100644
index 0000000..ff36ea8
--- /dev/null
+++ b/COP_1/cop_2/helpers/enums/EnumAreaLegend.cs
@@ -0,0 +1,17 @@
+namespace COP_1.cop_2.helpers.enums
+{
+ public enum EnumAreaLegend
+ {
+ None,
+
+ Left,
+
+ Top,
+
+ Right,
+
+ Bottom,
+
+ TopRight
+ }
+}
diff --git a/COP_1Test/COP_1Test.csproj b/COP_1Test/COP_1Test.csproj
new file mode 100644
index 0000000..290aacf
--- /dev/null
+++ b/COP_1Test/COP_1Test.csproj
@@ -0,0 +1,15 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/COP_1Test/Form1.Designer.cs b/COP_1Test/Form1.Designer.cs
new file mode 100644
index 0000000..5440b03
--- /dev/null
+++ b/COP_1Test/Form1.Designer.cs
@@ -0,0 +1,167 @@
+namespace COP_1Test
+{
+ 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()
+ {
+ dropDownList = new COP_1.DropDownList();
+ valuesList = new COP_1.ValuesList();
+ emailBox = new COP_1.emailBox();
+ buttonCheck = new Button();
+ label1 = new Label();
+ buttonGet = new Button();
+ textBoxShowItem = new TextBox();
+ buttonGetDown = new Button();
+ textBoxResult = new TextBox();
+ buttonClear = new Button();
+ SuspendLayout();
+ //
+ // dropDownList
+ //
+ dropDownList.Location = new Point(12, 12);
+ dropDownList.Name = "dropDownList";
+ dropDownList.Selected = "";
+ dropDownList.Size = new Size(281, 49);
+ dropDownList.TabIndex = 0;
+ //
+ // valuesList
+ //
+ valuesList.Location = new Point(374, 12);
+ valuesList.Name = "valuesList";
+ valuesList.SelectedIndex = -1;
+ valuesList.Size = new Size(298, 125);
+ valuesList.TabIndex = 1;
+ //
+ // emailBox
+ //
+ emailBox.Location = new Point(12, 178);
+ emailBox.Name = "emailBox";
+ emailBox.Pattern = null;
+ emailBox.Size = new Size(281, 62);
+ emailBox.TabIndex = 2;
+ //
+ // buttonCheck
+ //
+ buttonCheck.Location = new Point(12, 246);
+ buttonCheck.Name = "buttonCheck";
+ buttonCheck.Size = new Size(281, 29);
+ buttonCheck.TabIndex = 3;
+ buttonCheck.Text = "Проверить";
+ buttonCheck.UseVisualStyleBackColor = true;
+ buttonCheck.Click += buttonCheck_Click;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Font = new Font("Segoe UI Black", 12F, FontStyle.Bold, GraphicsUnit.Point);
+ label1.ForeColor = Color.Chartreuse;
+ label1.Location = new Point(295, 210);
+ label1.Name = "label1";
+ label1.Size = new Size(69, 28);
+ label1.TabIndex = 4;
+ label1.Text = "label1";
+ label1.Visible = false;
+ //
+ // buttonGet
+ //
+ buttonGet.Location = new Point(374, 143);
+ buttonGet.Name = "buttonGet";
+ buttonGet.Size = new Size(298, 29);
+ buttonGet.TabIndex = 5;
+ buttonGet.Text = "Получить значение";
+ buttonGet.UseVisualStyleBackColor = true;
+ buttonGet.Click += buttonGet_Click;
+ //
+ // textBoxShowItem
+ //
+ textBoxShowItem.Location = new Point(374, 180);
+ textBoxShowItem.Name = "textBoxShowItem";
+ textBoxShowItem.Size = new Size(297, 27);
+ textBoxShowItem.TabIndex = 6;
+ //
+ // buttonGetDown
+ //
+ buttonGetDown.Location = new Point(12, 64);
+ buttonGetDown.Name = "buttonGetDown";
+ buttonGetDown.Size = new Size(139, 51);
+ buttonGetDown.TabIndex = 7;
+ buttonGetDown.Text = "Получить значение";
+ buttonGetDown.UseVisualStyleBackColor = true;
+ buttonGetDown.Click += buttonGetDown_Click;
+ //
+ // textBoxResult
+ //
+ textBoxResult.Location = new Point(12, 121);
+ textBoxResult.Name = "textBoxResult";
+ textBoxResult.Size = new Size(281, 27);
+ textBoxResult.TabIndex = 8;
+ //
+ // buttonClear
+ //
+ buttonClear.Location = new Point(154, 64);
+ buttonClear.Name = "buttonClear";
+ buttonClear.Size = new Size(139, 51);
+ buttonClear.TabIndex = 9;
+ buttonClear.Text = "Очистить";
+ buttonClear.UseVisualStyleBackColor = true;
+ buttonClear.Click += buttonClear_Click;
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(684, 286);
+ Controls.Add(buttonClear);
+ Controls.Add(textBoxResult);
+ Controls.Add(buttonGetDown);
+ Controls.Add(textBoxShowItem);
+ Controls.Add(buttonGet);
+ Controls.Add(label1);
+ Controls.Add(buttonCheck);
+ Controls.Add(emailBox);
+ Controls.Add(valuesList);
+ Controls.Add(dropDownList);
+ Name = "Form1";
+ Text = "Form1";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private COP_1.DropDownList dropDownList;
+ private COP_1.ValuesList valuesList;
+ private COP_1.emailBox emailBox;
+ private Button buttonCheck;
+ private Label label1;
+ private Button buttonGet;
+ private TextBox textBoxShowItem;
+ private Button buttonGetDown;
+ private TextBox textBoxResult;
+ private Button buttonClear;
+ }
+}
diff --git a/COP_1Test/Form1.cs b/COP_1Test/Form1.cs
new file mode 100644
index 0000000..a7e14b9
--- /dev/null
+++ b/COP_1Test/Form1.cs
@@ -0,0 +1,88 @@
+using COP_1;
+using System;
+
+namespace COP_1Test
+{
+ public partial class Form1 : Form
+ {
+ List list = new List();
+ public Form1()
+ {
+ InitializeComponent();
+ this.BackColor = GetRandomPastelColor();
+ list = new List();
+ list.AddRange(new string[] { " 1", " 2", " 3", " 4", " 5", " 6" });
+
+ Album album1 = new Album("Meds", "Placebo", "Alternative", "2006");
+ Album album2 = new Album("Iowa", "Slipknot", "Nu-Metal", "2001");
+ Album album3 = new Album("Showbiz", "Muse", "Alternative", "1999");
+ Album album4 = new Album("Chocolate Starfish and the Hot Dog Flavored Water", "Limp Bizkit", "Nu-metal", "2011");
+
+ valuesList.SetLayoutInfo(": {Title} : {Performer} : {Genre} : {Year}", "{", "}");
+ valuesList.AddInListBox(album1, 0);
+ valuesList.AddInListBox(album2, 1);
+ valuesList.AddInListBox(album3, 2);
+ valuesList.AddInListBox(album4, 3);
+
+ emailBox.Pattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
+
+ dropDownList.AddingToList(new List() { "Placebo", "Slipknot", "Blue October", "The Used", "Muse", "The Cure" });
+ dropDownList.ExplicitEvent += Event_Handler;
+
+ emailBox.ExplicitEvent += Event_Handler;
+ emailBox.SetExample("eeee@mail.ru");
+ }
+ private Color GetRandomPastelColor()
+ {
+ Random random = new Random();
+ int red = random.Next(128, 256);
+ int green = random.Next(128, 256);
+ int blue = random.Next(128, 256);
+
+ return Color.FromArgb(red, green, blue);
+ }
+
+
+ private void Event_Handler(object sender, EventArgs e)
+ {
+ this.BackColor = GetRandomPastelColor();
+ }
+
+
+ private void buttonGet_Click(object sender, EventArgs e)
+ {
+ string str = valuesList.GetObjectFromStr().Title + " " + valuesList.GetObjectFromStr().Performer + " " + valuesList.GetObjectFromStr().Genre + " " + valuesList.GetObjectFromStr().Year;
+ textBoxShowItem.Text = str;
+ }
+ private void buttonCheck_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (emailBox.TextBoxValue != null)
+ {
+ label1.Visible = true;
+ label1.Text = "true";
+ label1.ForeColor = Color.Green;
+ }
+ else
+ {
+ label1.Visible = true;
+ label1.Text = "false";
+ label1.ForeColor = Color.Red;
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ private void buttonClear_Click(object sender, EventArgs e)
+ {
+ dropDownList.Clear();
+ }
+ private void buttonGetDown_Click(object sender, EventArgs e)
+ {
+ textBoxResult.Text = dropDownList.Selected;
+ }
+ }
+}
diff --git a/COP_1Test/Form1.resx b/COP_1Test/Form1.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP_1Test/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/COP_1Test/Form2.Designer.cs b/COP_1Test/Form2.Designer.cs
new file mode 100644
index 0000000..0204665
--- /dev/null
+++ b/COP_1Test/Form2.Designer.cs
@@ -0,0 +1,141 @@
+namespace COP_1Test
+{
+ partial class Form2
+ {
+ ///
+ /// 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()
+ {
+ components = new System.ComponentModel.Container();
+ groupBox2 = new GroupBox();
+ button2 = new Button();
+ groupBox3 = new GroupBox();
+ button3 = new Button();
+ groupBox1 = new GroupBox();
+ button1 = new Button();
+ wordText = new COP_1.cop_2.WordBigText(components);
+ wordDiagram = new COP_1.cop_2.WordDiagram(components);
+ wordTable = new COP_1.cop_2.WordTable(components);
+ groupBox2.SuspendLayout();
+ groupBox3.SuspendLayout();
+ groupBox1.SuspendLayout();
+ SuspendLayout();
+ //
+ // groupBox2
+ //
+ groupBox2.Controls.Add(button2);
+ groupBox2.Dock = DockStyle.Top;
+ groupBox2.Location = new Point(0, 154);
+ groupBox2.Name = "groupBox2";
+ groupBox2.Size = new Size(294, 80);
+ groupBox2.TabIndex = 4;
+ groupBox2.TabStop = false;
+ groupBox2.Text = "Таблица";
+ //
+ // button2
+ //
+ button2.Dock = DockStyle.Fill;
+ button2.Location = new Point(3, 23);
+ button2.Name = "button2";
+ button2.Size = new Size(288, 54);
+ button2.TabIndex = 0;
+ button2.Text = "Создать";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += buttonTable_Click;
+ //
+ // groupBox3
+ //
+ groupBox3.Controls.Add(button3);
+ groupBox3.Dock = DockStyle.Top;
+ groupBox3.Location = new Point(0, 80);
+ groupBox3.Name = "groupBox3";
+ groupBox3.Size = new Size(294, 74);
+ groupBox3.TabIndex = 3;
+ groupBox3.TabStop = false;
+ groupBox3.Text = "Линейная диаграмма";
+ //
+ // button3
+ //
+ button3.Dock = DockStyle.Fill;
+ button3.Location = new Point(3, 23);
+ button3.Name = "button3";
+ button3.Size = new Size(288, 48);
+ button3.TabIndex = 0;
+ button3.Text = "Создать";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += buttonDiagram_Click;
+ //
+ // groupBox1
+ //
+ groupBox1.Controls.Add(button1);
+ groupBox1.Dock = DockStyle.Top;
+ groupBox1.Location = new Point(0, 0);
+ groupBox1.Name = "groupBox1";
+ groupBox1.Size = new Size(294, 80);
+ groupBox1.TabIndex = 2;
+ groupBox1.TabStop = false;
+ groupBox1.Text = "Большой текст";
+ //
+ // button1
+ //
+ button1.Dock = DockStyle.Fill;
+ button1.Location = new Point(3, 23);
+ button1.Name = "button1";
+ button1.Size = new Size(288, 54);
+ button1.TabIndex = 0;
+ button1.Text = "Создать";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += buttonBigText_Click;
+ //
+ // Form2
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(294, 239);
+ Controls.Add(groupBox2);
+ Controls.Add(groupBox3);
+ Controls.Add(groupBox1);
+ Name = "Form2";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "COP_2";
+ groupBox2.ResumeLayout(false);
+ groupBox3.ResumeLayout(false);
+ groupBox1.ResumeLayout(false);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private GroupBox groupBox2;
+ private Button button2;
+ private GroupBox groupBox3;
+ private Button button3;
+ private GroupBox groupBox1;
+ private Button button1;
+ private COP_1.cop_2.WordBigText wordText;
+ private COP_1.cop_2.WordDiagram wordDiagram;
+ private COP_1.cop_2.WordTable wordTable;
+ }
+}
\ No newline at end of file
diff --git a/COP_1Test/Form2.cs b/COP_1Test/Form2.cs
new file mode 100644
index 0000000..03412d7
--- /dev/null
+++ b/COP_1Test/Form2.cs
@@ -0,0 +1,133 @@
+using COP_1.cop_2.helpers.enums;
+using COP_1.cop_2.helpers;
+using COP_1.cop_2;
+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;
+using static System.Net.WebRequestMethods;
+using COP_1;
+
+namespace COP_1Test
+{
+ public partial class Form2 : Form
+ {
+ string[] testArray = { "«Да, здесь, в этом лесу был этот дуб, с которым мы были согласны», подумал князь Андрей. " +
+ "«Да где он», подумал опять князь Андрей, глядя на левую сторону дороги и сам того не зная, не узнавая его, любовался тем дубом, которого он искал. " +
+ "Старый дуб, весь преображенный, раскинувшись шатром сочной, темной зелени, млел, чуть колыхаясь в лучах вечернего солнца. Ни корявых пальцев, ни болячек, " +
+ "ни старого недоверия и горя, – ничего не было видно. Сквозь жесткую, столетнюю кору пробились без сучков сочные, молодые листья, так что верить нельзя было, что " +
+ "этот старик произвел их. «Да, это тот самый дуб», подумал князь Андрей, и на него вдруг нашло беспричинное, весеннее чувство радости и обновления. " +
+ "Все лучшие минуты его жизни вдруг в одно и то же время вспомнились ему. И Аустерлиц с высоким небом, и мертвое, укоризненное лицо жены, и Пьер на пароме, " +
+ "и девочка, взволнованная красотою ночи, и эта ночь, и луна, – и все это вдруг вспомнилось ему." + Environment.NewLine,
+ "«Нет, жизнь не кончена в 31 год, вдруг окончательно, беспеременно " +
+ "решил князь Андрей. Мало того, что я знаю все то, что есть во мне, надо, чтобы и все знали это: и Пьер, и эта девочка, которая хотела улететь в небо, надо, чтобы " +
+ "все знали меня, чтобы не для одного меня шла моя жизнь, чтоб не жили они так независимо от моей жизни, чтоб на всех она отражалась и чтобы все они жили со мною вместе!»"};
+ public Form2()
+ {
+ InitializeComponent();
+ }
+
+ private void buttonBigText_Click(object sender, EventArgs e)
+ {
+ //фильтрация файлов для диалогового окна
+ using var dialog = new SaveFileDialog
+ {
+ Filter = "docx|*.docx"
+ };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ WordBigTextInfo largeText = new(dialog.FileName, "Встреча Болконского с дубом pt.2", testArray);
+ wordText.CreateWordText(largeText);
+
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+
+ private void buttonTable_Click(object sender, EventArgs e)
+ {
+ List mergedColumns = new()
+ {
+ new int[] { 2, 3 }
+ };
+
+ var columns = new List
+ {
+ new() { FirstRowHeader = "Название", SecondRowHeader = "", PropertyName = "Title", Width = 1.3 },
+ new() { FirstRowHeader = "Исполнитель", SecondRowHeader = "",PropertyName = "Performer", Width = 1.3 },
+ new() { FirstRowHeader = "Общая информация", SecondRowHeader = "Жанр", PropertyName = "Genre", Width = 1.3 },
+ new() { FirstRowHeader = "Общая информация", SecondRowHeader = "Год", PropertyName = "Year", Width = 1.3 },
+ };
+
+ var albums = new List
+ {
+ new() {Title = "Battle For The Sun", Performer = "Placebo", Genre = "Alternative", Year = "2009"},
+ new() {Title = "The Bastards", Performer = "Palaye Royale", Genre = "Glam Rock", Year = "2020"},
+ new() {Title = "All Hope Is Gone", Performer = "Slipknot", Genre = "Nu-Metal", Year = "2008"},
+ new() {Title = "Three Imaginary Boys", Performer = "The Cure", Genre = "Gothic Rock", Year = "1979"},
+ new() {Title = "Black Holes and Revelations", Performer = "Muse", Genre = "Alternative", Year = "2006" }
+ };
+
+ using var dialog = new SaveFileDialog
+ {
+ Filter = "docx|*.docx"
+ };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ WordTableInfo info = new(dialog.FileName, "Задание 2", columns, albums, mergedColumns);
+ wordTable.CreateTable(info);
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+
+ private void buttonDiagram_Click(object sender, EventArgs e)
+ {
+ //фильтрация файлов для диалогового окна
+ using var dialog = new SaveFileDialog
+ {
+ Filter = "docx|*.docx"
+ };
+
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ string[] cathegories = { "Январь", "Февраль", "Март", "April", "May" };
+ (string, double)[] alb1 = { ("January", 600), ("February", 500), ("March", 300) };
+ (string, double)[] alb2 = { ("January", 300), ("February", 500), ("March", 700) };
+ (string, double)[] alb3 = { ("January", 200), ("February", 300), ("March", 100) };
+
+ SimpleLineChart diagram = new(dialog.FileName, "Третье задание", "График популярности альбомов", EnumAreaLegend.Right, new List {
+ new DataLineChart("Meds", alb1), new DataLineChart("Iowa", alb2), new DataLineChart("Regional At Best", alb3),
+ });
+
+ wordDiagram.AddDiagram(diagram);
+
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+}
diff --git a/COP_1Test/Form2.resx b/COP_1Test/Form2.resx
new file mode 100644
index 0000000..7e3d4e6
--- /dev/null
+++ b/COP_1Test/Form2.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 132, 17
+
+
+ 280, 17
+
+
\ No newline at end of file
diff --git a/COP_1Test/Program.cs b/COP_1Test/Program.cs
new file mode 100644
index 0000000..0c55acb
--- /dev/null
+++ b/COP_1Test/Program.cs
@@ -0,0 +1,17 @@
+namespace COP_1Test
+{
+ internal static class Program
+ {
+ ///
+ /// 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 Form2());
+ }
+ }
+}
\ No newline at end of file