diff --git a/TestsComponents/FormTestComponents.Designer.cs b/TestsComponents/FormTestComponents.Designer.cs
index 1a00ed9..1174020 100644
--- a/TestsComponents/FormTestComponents.Designer.cs
+++ b/TestsComponents/FormTestComponents.Designer.cs
@@ -20,77 +20,143 @@
base.Dispose(disposing);
}
- #region Windows Form Designer generated code
+ #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()
- {
- userCheckedListBox = new WinFormsLibrary1.UserCheckedListBox();
- buttonClear = new Button();
- ButtonShowItems = new Button();
- textBoxItems = new TextBox();
- SuspendLayout();
- //
- // userCheckedListBox
- //
- userCheckedListBox.Location = new Point(0, 0);
- userCheckedListBox.Name = "userCheckedListBox";
- userCheckedListBox.SelectedValue = "";
- userCheckedListBox.Size = new Size(263, 170);
- userCheckedListBox.TabIndex = 0;
- userCheckedListBox.SelectedValueChanged += UserCheckedListBox_SelectedValueChanged;
- //
- // buttonClear
- //
- buttonClear.Location = new Point(0, 176);
- buttonClear.Name = "buttonClear";
- buttonClear.Size = new Size(263, 29);
- buttonClear.TabIndex = 2;
- buttonClear.Text = "Очистить";
- buttonClear.UseVisualStyleBackColor = true;
- buttonClear.Click += buttonClear_Click;
- //
- // ButtonShowItems
- //
- ButtonShowItems.Location = new Point(0, 211);
- ButtonShowItems.Name = "ButtonShowItems";
- ButtonShowItems.Size = new Size(263, 29);
- ButtonShowItems.TabIndex = 3;
- ButtonShowItems.Text = "Показать";
- ButtonShowItems.UseVisualStyleBackColor = true;
- ButtonShowItems.Click += ButtonShowItems_Click;
- //
- // textBoxItems
- //
- textBoxItems.Location = new Point(0, 246);
- textBoxItems.Multiline = true;
- textBoxItems.Name = "textBoxItems";
- textBoxItems.Size = new Size(263, 87);
- textBoxItems.TabIndex = 4;
- //
- // FormTestComponents
- //
- AutoScaleDimensions = new SizeF(8F, 20F);
- AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(800, 450);
- Controls.Add(textBoxItems);
- Controls.Add(ButtonShowItems);
- Controls.Add(buttonClear);
- Controls.Add(userCheckedListBox);
- Name = "FormTestComponents";
- Text = "FormTestComponents ";
- ResumeLayout(false);
- PerformLayout();
- }
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ userCheckedListBox = new WinFormsLibrary1.UserCheckedListBox();
+ buttonClear = new Button();
+ ButtonShowItems = new Button();
+ textBoxItems = new TextBox();
+ userDateTimePicker = new COP.UserDateTimePicker();
+ textBoxShowDate = new TextBox();
+ ButtonShowDate = new Button();
+ ButtonRangeSet = new Button();
+ userTreeView = new COP.UserTreeView();
+ SuspendLayout();
+ //
+ // userCheckedListBox
+ //
+ userCheckedListBox.Location = new Point(0, 0);
+ userCheckedListBox.Margin = new Padding(3, 2, 3, 2);
+ userCheckedListBox.Name = "userCheckedListBox";
+ userCheckedListBox.SelectedValue = "";
+ userCheckedListBox.Size = new Size(230, 128);
+ userCheckedListBox.TabIndex = 0;
+ userCheckedListBox.SelectedValueChanged += UserCheckedListBox_SelectedValueChanged;
+ //
+ // buttonClear
+ //
+ buttonClear.Location = new Point(0, 132);
+ buttonClear.Margin = new Padding(3, 2, 3, 2);
+ buttonClear.Name = "buttonClear";
+ buttonClear.Size = new Size(230, 22);
+ buttonClear.TabIndex = 2;
+ buttonClear.Text = "Очистить";
+ buttonClear.UseVisualStyleBackColor = true;
+ buttonClear.Click += buttonClear_Click;
+ //
+ // ButtonShowItems
+ //
+ ButtonShowItems.Location = new Point(0, 158);
+ ButtonShowItems.Margin = new Padding(3, 2, 3, 2);
+ ButtonShowItems.Name = "ButtonShowItems";
+ ButtonShowItems.Size = new Size(230, 22);
+ ButtonShowItems.TabIndex = 3;
+ ButtonShowItems.Text = "Показать";
+ ButtonShowItems.UseVisualStyleBackColor = true;
+ ButtonShowItems.Click += ButtonShowItems_Click;
+ //
+ // textBoxItems
+ //
+ textBoxItems.Location = new Point(0, 184);
+ textBoxItems.Margin = new Padding(3, 2, 3, 2);
+ textBoxItems.Multiline = true;
+ textBoxItems.Name = "textBoxItems";
+ textBoxItems.Size = new Size(231, 66);
+ textBoxItems.TabIndex = 4;
+ //
+ // userDateTimePicker
+ //
+ userDateTimePicker.Location = new Point(258, 11);
+ userDateTimePicker.Margin = new Padding(3, 2, 3, 2);
+ userDateTimePicker.MaxValue = null;
+ userDateTimePicker.MinValue = null;
+ userDateTimePicker.Name = "userDateTimePicker";
+ userDateTimePicker.Size = new Size(222, 22);
+ userDateTimePicker.TabIndex = 5;
+ userDateTimePicker.ValueChanged += UserDateTimePicker_ValueChanged;
+ //
+ // textBoxShowDate
+ //
+ textBoxShowDate.Location = new Point(258, 58);
+ textBoxShowDate.Name = "textBoxShowDate";
+ textBoxShowDate.Size = new Size(222, 23);
+ textBoxShowDate.TabIndex = 6;
+ //
+ // ButtonShowDate
+ //
+ ButtonShowDate.Location = new Point(290, 105);
+ ButtonShowDate.Name = "ButtonShowDate";
+ ButtonShowDate.Size = new Size(168, 23);
+ ButtonShowDate.TabIndex = 7;
+ ButtonShowDate.Text = "Показать";
+ ButtonShowDate.UseVisualStyleBackColor = true;
+ ButtonShowDate.Click += ButtonShowDate_Click;
+ //
+ // ButtonRangeSet
+ //
+ ButtonRangeSet.Location = new Point(486, 47);
+ ButtonRangeSet.Name = "ButtonRangeSet";
+ ButtonRangeSet.Size = new Size(131, 43);
+ ButtonRangeSet.TabIndex = 8;
+ ButtonRangeSet.Text = "Установить диапозон";
+ ButtonRangeSet.UseVisualStyleBackColor = true;
+ ButtonRangeSet.Click += ButtonRangeSet_Click;
+ //
+ // userTreeView
+ //
+ userTreeView.Location = new Point(454, 158);
+ userTreeView.Name = "userTreeView";
+ userTreeView.Size = new Size(150, 95);
+ userTreeView.TabIndex = 9;
+ userTreeView.Load += UserTreeView_Load;
+ //
+ // FormTestComponents
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(700, 338);
+ Controls.Add(userTreeView);
+ Controls.Add(ButtonRangeSet);
+ Controls.Add(ButtonShowDate);
+ Controls.Add(textBoxShowDate);
+ Controls.Add(userDateTimePicker);
+ Controls.Add(textBoxItems);
+ Controls.Add(ButtonShowItems);
+ Controls.Add(buttonClear);
+ Controls.Add(userCheckedListBox);
+ Margin = new Padding(3, 2, 3, 2);
+ Name = "FormTestComponents";
+ Text = "FormTestComponents ";
+ ResumeLayout(false);
+ PerformLayout();
+ }
- #endregion
+ #endregion
- private WinFormsLibrary1.UserCheckedListBox userCheckedListBox;
+ private WinFormsLibrary1.UserCheckedListBox userCheckedListBox;
private Button buttonClear;
private Button ButtonShowItems;
private TextBox textBoxItems;
- }
+ private COP.UserDateTimePicker userDateTimePicker;
+ private TextBox textBoxShowDate;
+ private Button ButtonShowDate;
+ private Button ButtonRangeSet;
+ private COP.UserTreeView userTreeView;
+ }
}
diff --git a/TestsComponents/FormTestComponents.cs b/TestsComponents/FormTestComponents.cs
index c370512..c9057ff 100644
--- a/TestsComponents/FormTestComponents.cs
+++ b/TestsComponents/FormTestComponents.cs
@@ -1,29 +1,85 @@
+using COP;
+
namespace TestsComponents
{
- public partial class FormTestComponents : Form
- {
- public FormTestComponents()
- {
- InitializeComponent();
- Fill();
- }
- public void Fill()
- {
- userCheckedListBox.append(new() { "items1", "dsdsf", "items3", "fgdg", "iit" });
- }
- private void UserCheckedListBox_SelectedValueChanged(object sender, EventArgs e)
- {
- MessageBox.Show("Selected value changed");
- }
- private void buttonClear_Click(object sender, EventArgs e)
- {
- userCheckedListBox.ClearList();
- }
- private void ButtonShowItems_Click(object sender, EventArgs e)
- {
-
- textBoxItems.Text = userCheckedListBox.SelectedValue;
- }
-
- }
+ public partial class FormTestComponents : Form
+ {
+ public FormTestComponents()
+ {
+ InitializeComponent();
+ Fill();
+ }
+ public void Fill()
+ {
+ userCheckedListBox.append(new() { "items1", "dsdsf", "items3", "fgdg", "iit" });
+ }
+ private void UserCheckedListBox_SelectedValueChanged(object sender, EventArgs e)
+ {
+
+ MessageBox.Show("Selected value changed");
+
+ }
+ private void buttonClear_Click(object sender, EventArgs e)
+ {
+ userCheckedListBox.ClearList();
+ }
+ private void ButtonShowItems_Click(object sender, EventArgs e)
+ {
+
+ textBoxItems.Text = userCheckedListBox.SelectedValue;
+ }
+ private void ButtonShowDate_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ textBoxShowDate.Clear();
+ textBoxShowDate.Text = userDateTimePicker.SelectedValue.ToString();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("");
+ }
+ }
+ private void UserDateTimePicker_ValueChanged(object sender, EventArgs e)
+ {
+ MessageBox.Show("Value changed");
+ DateTime? selectedDate = userDateTimePicker.SelectedValue;
+ }
+
+ private void ButtonRangeSet_Click(object sender, EventArgs e)
+ {
+ userDateTimePicker.MaxValue = new DateTime(2024, 9, 20);
+ userDateTimePicker.MinValue = new DateTime(2024,8,10);
+ }
+ private void UserTreeView_Load(object sender, EventArgs e)
+ {
+ List employees = new List
+ {
+ new Employee { Department = "1", Position = "1", Name = "1" },
+ new Employee { Department = "2", Position = "2", Name = "2" },
+ new Employee { Department = "1", Position = "1", Name = "3" },
+ new Employee { Department = "2", Position = "3", Name = "4" },
+ };
+ var Hierarchy = new List { "Department", "Position", "Name" };
+ foreach (var prop in employees[0].GetType().GetProperties())
+ {
+ userTreeView.Hierarchy.Add(prop.Name);
+ }
+
+ try
+ {
+ userTreeView.PopulateTree(employees);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ public class Employee
+ {
+ public string? Department { get; set; }
+ public string? Position { get; set; }
+ public string? Name { get; set; }
+ }
+ }
}
diff --git a/WinFormsLibrary1/Exceptions/NoRangeException.cs b/WinFormsLibrary1/Exceptions/NoRangeException.cs
index f1958ef..6e4a6b8 100644
--- a/WinFormsLibrary1/Exceptions/NoRangeException.cs
+++ b/WinFormsLibrary1/Exceptions/NoRangeException.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace COP.Exceptions
{
[Serializable]
- public class NoRangeException : ApplicationException
+ public class NoRangeException : Exception
{
public NoRangeException() : base() { }
public NoRangeException(string message) : base(message) { }
diff --git a/WinFormsLibrary1/Exceptions/NotIncludedInRangeException.cs b/WinFormsLibrary1/Exceptions/NotIncludedInRangeException.cs
index 612f586..0ea0609 100644
--- a/WinFormsLibrary1/Exceptions/NotIncludedInRangeException.cs
+++ b/WinFormsLibrary1/Exceptions/NotIncludedInRangeException.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace COP.Exceptions
{
[Serializable]
- public class NotIncludedInRangeException: ApplicationException
+ public class NotIncludedInRangeException: Exception
{
public NotIncludedInRangeException() : base() { }
diff --git a/WinFormsLibrary1/UserDateTimePickercs.Designer.cs b/WinFormsLibrary1/UserDateTimePicker.Designer.cs
similarity index 97%
rename from WinFormsLibrary1/UserDateTimePickercs.Designer.cs
rename to WinFormsLibrary1/UserDateTimePicker.Designer.cs
index 900f4a6..7532c70 100644
--- a/WinFormsLibrary1/UserDateTimePickercs.Designer.cs
+++ b/WinFormsLibrary1/UserDateTimePicker.Designer.cs
@@ -1,6 +1,6 @@
namespace COP
{
- partial class UserDateTimePickercs
+ partial class UserDateTimePicker
{
///
/// Обязательная переменная конструктора.
diff --git a/WinFormsLibrary1/UserDateTimePickercs.cs b/WinFormsLibrary1/UserDateTimePicker.cs
similarity index 85%
rename from WinFormsLibrary1/UserDateTimePickercs.cs
rename to WinFormsLibrary1/UserDateTimePicker.cs
index b52fa25..0a08edc 100644
--- a/WinFormsLibrary1/UserDateTimePickercs.cs
+++ b/WinFormsLibrary1/UserDateTimePicker.cs
@@ -11,13 +11,13 @@ using COP.Exceptions;
namespace COP
{
- public partial class UserDateTimePickercs : UserControl
+ public partial class UserDateTimePicker : UserControl
{
private DateTime? minValue;
private DateTime? maxValue;
public event EventHandler? _valueChanged;
- public UserDateTimePickercs()
+ public UserDateTimePicker()
{
InitializeComponent();
@@ -44,9 +44,9 @@ namespace COP
else if (dateTimePicker.Value < minValue ||
dateTimePicker.Value > maxValue)
{
-
- return null;
- }
+ throw new NotIncludedInRangeException("Selected value is out of range.");
+
+ }
return dateTimePicker.Value;
}
@@ -60,8 +60,9 @@ namespace COP
if (value < minValue || value > maxValue)
{
- throw new NotIncludedInRangeException("Selected value is out of range.");
- }
+ return;
+
+ }
dateTimePicker.Value = value.Value;
diff --git a/WinFormsLibrary1/UserDateTimePickercs.resx b/WinFormsLibrary1/UserDateTimePicker.resx
similarity index 100%
rename from WinFormsLibrary1/UserDateTimePickercs.resx
rename to WinFormsLibrary1/UserDateTimePicker.resx
diff --git a/WinFormsLibrary1/UserTreeView.Designer.cs b/WinFormsLibrary1/UserTreeView.Designer.cs
new file mode 100644
index 0000000..5f1b0ac
--- /dev/null
+++ b/WinFormsLibrary1/UserTreeView.Designer.cs
@@ -0,0 +1,55 @@
+namespace COP
+{
+ partial class UserTreeView
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ 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()
+ {
+ treeView = new TreeView();
+ SuspendLayout();
+ //
+ // treeView
+ //
+ treeView.Location = new Point(0, 0);
+ treeView.Name = "treeView";
+ treeView.Size = new Size(150, 97);
+ treeView.TabIndex = 0;
+ //
+ // UserTreeView
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(treeView);
+ Name = "UserTreeView";
+ Size = new Size(150, 95);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private TreeView treeView;
+ }
+}
diff --git a/WinFormsLibrary1/UserTreeView.cs b/WinFormsLibrary1/UserTreeView.cs
new file mode 100644
index 0000000..bad65f1
--- /dev/null
+++ b/WinFormsLibrary1/UserTreeView.cs
@@ -0,0 +1,95 @@
+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 COP
+{
+ public partial class UserTreeView : UserControl
+ {
+ public List Hierarchy;
+ public UserTreeView()
+ {
+ InitializeComponent();
+ Hierarchy = new();
+ }
+ public int SelectedItemIndex
+ {
+ get
+ {
+ if (treeView.SelectedNode == null)
+ {
+ return -1;
+ }
+ return treeView.SelectedNode.Index;
+ }
+ }
+ public T? GetSelectedObject() where T : class, new()
+ {
+ // параметризованный
+ //проверка есть или нет иерархии
+ TreeNode selectedNode = treeView.SelectedNode;
+ if (Hierarchy == null)
+ {
+ throw new Exception("Hierarchy is not set.");
+ }
+ if (selectedNode?.FirstNode != null)
+ {
+ throw new Exception("Not a last level node.");
+ }
+ T currentBranch = new T();
+ Hierarchy.Reverse();
+ foreach (var property in Hierarchy)
+ {
+ typeof(T).GetProperty(property).SetValue(currentBranch, Convert.ChangeType(selectedNode.Text, typeof(T).GetProperty(property).PropertyType));
+
+ selectedNode = selectedNode.Parent;
+ }
+ Hierarchy.Reverse();
+ return currentBranch;
+
+ }
+ public void PopulateTree(List items)
+ {
+ treeView.BeginUpdate();
+ treeView.Nodes.Clear();
+ if (items == null)
+ {
+ throw new ArgumentNullException(nameof(items));
+ }
+ if (Hierarchy == null)
+ {
+ throw new Exception("Hierarchy is not set.");
+ }
+
+ foreach (var item in items)
+ {
+ TreeNodeCollection treeViewNodes = treeView.Nodes;
+ foreach (var elem in Hierarchy)
+ {
+ bool flag = false;
+ for (int i = 0; i < treeViewNodes.Count; i++)
+ {
+ if (item.GetType().GetProperty(elem).GetValue(item).ToString() == treeViewNodes[i].Text)
+ {
+ treeViewNodes = treeViewNodes[i].Nodes;
+ flag = true;
+ break;
+ }
+ }
+ if (!flag)
+ {
+ var newNode = treeViewNodes.Add(item.GetType().GetProperty(elem).GetValue(item).ToString());
+ treeViewNodes = newNode.Nodes;
+ }
+ }
+ }
+ treeView.EndUpdate();
+ }
+ }
+}
diff --git a/WinFormsLibrary1/UserTreeView.resx b/WinFormsLibrary1/UserTreeView.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFormsLibrary1/UserTreeView.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