diff --git a/COP/PutincevLibrary/Attributes/AlwaysCreateAttribute.cs b/COP/PutincevLibrary/Attributes/AlwaysCreateAttribute.cs
new file mode 100644
index 0000000..23ef7d6
--- /dev/null
+++ b/COP/PutincevLibrary/Attributes/AlwaysCreateAttribute.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PutincevLibrary.Attributes
+{
+ public class AlwaysCreateAttribute : Attribute
+ {
+ public AlwaysCreateAttribute()
+ { }
+ }
+}
diff --git a/COP/PutincevLibrary/CheckedListBoxControl.Designer.cs b/COP/PutincevLibrary/CheckedListBoxControl.Designer.cs
new file mode 100644
index 0000000..6ab7cd7
--- /dev/null
+++ b/COP/PutincevLibrary/CheckedListBoxControl.Designer.cs
@@ -0,0 +1,59 @@
+namespace PutincevLibrary
+{
+ partial class CheckedListBoxControl
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ 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()
+ {
+ checkedListBox = new CheckedListBox();
+ SuspendLayout();
+ //
+ // checkedListBox
+ //
+ checkedListBox.CheckOnClick = true;
+ checkedListBox.Dock = DockStyle.Fill;
+ checkedListBox.FormattingEnabled = true;
+ checkedListBox.Location = new Point(0, 0);
+ checkedListBox.Name = "checkedListBox";
+ checkedListBox.Size = new Size(150, 136);
+ checkedListBox.TabIndex = 0;
+ checkedListBox.ItemCheck += checkedListBox_ItemCheck;
+ //
+ // CheckedListBoxControl
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(checkedListBox);
+ Name = "CheckedListBoxControl";
+ Size = new Size(150, 136);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private CheckedListBox checkedListBox;
+ }
+}
diff --git a/COP/PutincevLibrary/CheckedListBoxControl.cs b/COP/PutincevLibrary/CheckedListBoxControl.cs
new file mode 100644
index 0000000..0f1fe70
--- /dev/null
+++ b/COP/PutincevLibrary/CheckedListBoxControl.cs
@@ -0,0 +1,70 @@
+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 PutincevLibrary
+{
+ public partial class CheckedListBoxControl : UserControl
+ {
+ public CheckedListBoxControl()
+ {
+ InitializeComponent();
+ }
+
+ private EventHandler _onCheckedItemChangedEvent;
+ public event EventHandler CheckedItemChanged
+ {
+ add
+ {
+ _onCheckedItemChangedEvent += value;
+ }
+ remove
+ {
+ _onCheckedItemChangedEvent -= value;
+ }
+ }
+ public string CheckedItem
+ {
+ get
+ {
+ return checkedListBox.CheckedItems[0] as string ?? string.Empty;
+ }
+ set
+ {
+ if (checkedListBox.Items.Contains(value))
+ {
+ checkedListBox.SetItemCheckState(checkedListBox.Items.IndexOf(value), CheckState.Checked);
+ }
+ }
+ }
+ public void SetCheckedListBoxValues(List values)
+ {
+ ClearCheckedListBoxValues();
+ foreach (var item in values)
+ {
+ checkedListBox.Items.Add(item);
+ }
+ }
+ public void ClearCheckedListBoxValues()
+ {
+ checkedListBox.Items.Clear();
+ }
+ private void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
+ {
+ for (int i = 0; i < checkedListBox.Items.Count; i++)
+ {
+ if (i != e.Index)
+ {
+ checkedListBox.SetItemChecked(i, false);
+ }
+ }
+ _onCheckedItemChangedEvent?.Invoke(sender, e);
+ }
+ }
+}
diff --git a/COP/PutincevLibrary/CheckedListBoxControl.resx b/COP/PutincevLibrary/CheckedListBoxControl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP/PutincevLibrary/CheckedListBoxControl.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/PutincevLibrary/Class1.cs b/COP/PutincevLibrary/Class1.cs
deleted file mode 100644
index c3db447..0000000
--- a/COP/PutincevLibrary/Class1.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace PutincevLibrary
-{
- public class Class1
- {
- }
-}
diff --git a/COP/PutincevLibrary/DateTimePickerControl.Designer.cs b/COP/PutincevLibrary/DateTimePickerControl.Designer.cs
new file mode 100644
index 0000000..dfc6c89
--- /dev/null
+++ b/COP/PutincevLibrary/DateTimePickerControl.Designer.cs
@@ -0,0 +1,56 @@
+namespace PutincevLibrary
+{
+ partial class DateTimePickerControl
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ 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()
+ {
+ dateTimePicker = new DateTimePicker();
+ SuspendLayout();
+ //
+ // dateTimePicker
+ //
+ dateTimePicker.Dock = DockStyle.Fill;
+ dateTimePicker.Location = new Point(0, 0);
+ dateTimePicker.Name = "dateTimePicker";
+ dateTimePicker.Size = new Size(150, 27);
+ dateTimePicker.TabIndex = 0;
+ //
+ // DateTimePickerControl
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(dateTimePicker);
+ Name = "DateTimePickerControl";
+ Size = new Size(150, 26);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private DateTimePicker dateTimePicker;
+ }
+}
diff --git a/COP/PutincevLibrary/DateTimePickerControl.cs b/COP/PutincevLibrary/DateTimePickerControl.cs
new file mode 100644
index 0000000..4bb38ba
--- /dev/null
+++ b/COP/PutincevLibrary/DateTimePickerControl.cs
@@ -0,0 +1,83 @@
+using PutincevLibrary.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 PutincevLibrary
+{
+ public partial class DateTimePickerControl : UserControl
+ {
+ public DateTimePickerControl()
+ {
+ InitializeComponent();
+ }
+
+ private DateTime? minValue;
+ private DateTime? maxValue;
+
+ public event EventHandler? _valueChanged;
+ public DateTime? MinValue
+ {
+ get { return minValue; }
+ set { minValue = value; }
+ }
+
+ public DateTime? MaxValue
+ {
+ get { return maxValue; }
+ set { maxValue = value; }
+ }
+ public DateTime? SelectedValue
+ {
+ get
+ {
+ if (!minValue.HasValue || !maxValue.HasValue)
+ {
+ throw new RangeNullException("Диапозон не был задан");
+ }
+ else if (dateTimePicker.Value < minValue ||
+ dateTimePicker.Value > maxValue)
+ {
+
+ throw new WrongRangeException("Значение не попадает в диапазон");
+ }
+
+ return dateTimePicker.Value;
+ }
+ set
+ {
+
+ if (!minValue.HasValue || !maxValue.HasValue)
+ {
+ return;
+ }
+ if (value < minValue || value > maxValue)
+ {
+
+ return;
+ }
+
+ dateTimePicker.Value = value.Value;
+
+ }
+ }
+ public event EventHandler ValueChanged
+ {
+ add { _valueChanged += value; }
+ remove { _valueChanged -= value; }
+ }
+ private void DateTimePicker_ValueChanged(object sender, EventArgs e)
+ {
+
+
+ _valueChanged?.Invoke(this, e);
+
+ }
+ }
+}
diff --git a/COP/PutincevLibrary/DateTimePickerControl.resx b/COP/PutincevLibrary/DateTimePickerControl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP/PutincevLibrary/DateTimePickerControl.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/PutincevLibrary/Exceptions/AttributeNullException.cs b/COP/PutincevLibrary/Exceptions/AttributeNullException.cs
new file mode 100644
index 0000000..0081cea
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/AttributeNullException.cs
@@ -0,0 +1,17 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class AttributeNullException : Exception
+ {
+ public AttributeNullException()
+ {
+ }
+
+ public AttributeNullException(string message) : base(message)
+ {
+ }
+
+ public AttributeNullException(string message, Exception inner) : base(message, inner)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/COP/PutincevLibrary/Exceptions/HierarchyNullException.cs b/COP/PutincevLibrary/Exceptions/HierarchyNullException.cs
new file mode 100644
index 0000000..e88a1c4
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/HierarchyNullException.cs
@@ -0,0 +1,17 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class HierarchyNullException : Exception
+ {
+ public HierarchyNullException()
+ {
+ }
+
+ public HierarchyNullException(string message) : base(message)
+ {
+ }
+
+ public HierarchyNullException(string message, Exception inner) : base(message, inner)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/COP/PutincevLibrary/Exceptions/NodeIsNotLeafException.cs b/COP/PutincevLibrary/Exceptions/NodeIsNotLeafException.cs
new file mode 100644
index 0000000..9d0622a
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/NodeIsNotLeafException.cs
@@ -0,0 +1,7 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class NodeIsNotLeafException : UserControlTreeViewException
+ {
+ public NodeIsNotLeafException() : base("Selected node is not a leaf") { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/NotSelectedNodeException.cs b/COP/PutincevLibrary/Exceptions/NotSelectedNodeException.cs
new file mode 100644
index 0000000..9e51cfb
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/NotSelectedNodeException.cs
@@ -0,0 +1,7 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class NotSelectedNodeException : UserControlTreeViewException
+ {
+ public NotSelectedNodeException() : base("Node is not selected") { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/PropertyNotDeclaratedException.cs b/COP/PutincevLibrary/Exceptions/PropertyNotDeclaratedException.cs
new file mode 100644
index 0000000..71564dd
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/PropertyNotDeclaratedException.cs
@@ -0,0 +1,7 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class PropertyNotDeclaratedException : UserControlTreeViewException
+ {
+ public PropertyNotDeclaratedException(string propName) : base($"Property \"{propName}\" not declared") { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/PropertyNullException.cs b/COP/PutincevLibrary/Exceptions/PropertyNullException.cs
new file mode 100644
index 0000000..778b083
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/PropertyNullException.cs
@@ -0,0 +1,7 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class PropertyNullException : UserControlTreeViewException
+ {
+ public PropertyNullException(string propName) : base($"Property \"{propName}\" is null") { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/RangeNotSetException.cs b/COP/PutincevLibrary/Exceptions/RangeNotSetException.cs
new file mode 100644
index 0000000..dbfc225
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/RangeNotSetException.cs
@@ -0,0 +1,8 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class RangeNotSetException : Exception
+ {
+ public RangeNotSetException() { }
+ public RangeNotSetException(string message) : base(message) { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/RangeNullException.cs b/COP/PutincevLibrary/Exceptions/RangeNullException.cs
new file mode 100644
index 0000000..0cbcfa7
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/RangeNullException.cs
@@ -0,0 +1,17 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class RangeNullException : Exception
+ {
+ public RangeNullException()
+ {
+ }
+
+ public RangeNullException(string message) : base(message)
+ {
+ }
+
+ public RangeNullException(string message, Exception inner) : base(message, inner)
+ {
+ }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/TreeHierarchyNotSetException.cs b/COP/PutincevLibrary/Exceptions/TreeHierarchyNotSetException.cs
new file mode 100644
index 0000000..1c8d859
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/TreeHierarchyNotSetException.cs
@@ -0,0 +1,7 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class TreeHierarchyNotSetException : UserControlTreeViewException
+ {
+ public TreeHierarchyNotSetException() : base("Tree hierarchy not set") { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/UserControlTreeViewException.cs b/COP/PutincevLibrary/Exceptions/UserControlTreeViewException.cs
new file mode 100644
index 0000000..a8692a8
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/UserControlTreeViewException.cs
@@ -0,0 +1,8 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class UserControlTreeViewException : Exception
+ {
+ public UserControlTreeViewException() { }
+ public UserControlTreeViewException(string message) : base(message) { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/ValueOutOfRangeException.cs b/COP/PutincevLibrary/Exceptions/ValueOutOfRangeException.cs
new file mode 100644
index 0000000..7954fcd
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/ValueOutOfRangeException.cs
@@ -0,0 +1,8 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class ValueOutOfRangeException : Exception
+ {
+ public ValueOutOfRangeException() { }
+ public ValueOutOfRangeException(string message) : base(message) { }
+ }
+}
diff --git a/COP/PutincevLibrary/Exceptions/WrongRangeException.cs b/COP/PutincevLibrary/Exceptions/WrongRangeException.cs
new file mode 100644
index 0000000..14d1ac7
--- /dev/null
+++ b/COP/PutincevLibrary/Exceptions/WrongRangeException.cs
@@ -0,0 +1,17 @@
+namespace PutincevLibrary.Exceptions
+{
+ public class WrongRangeException : Exception
+ {
+ public WrongRangeException()
+ {
+ }
+
+ public WrongRangeException(string message) : base(message)
+ {
+ }
+
+ public WrongRangeException(string message, Exception inner) : base(message, inner)
+ {
+ }
+ }
+}
diff --git a/COP/PutincevLibrary/PutincevLibrary.csproj b/COP/PutincevLibrary/PutincevLibrary.csproj
index 060aa1c..db6be70 100644
--- a/COP/PutincevLibrary/PutincevLibrary.csproj
+++ b/COP/PutincevLibrary/PutincevLibrary.csproj
@@ -5,6 +5,7 @@
enable
true
enable
+ Library
diff --git a/COP/PutincevLibrary/TreeViewControl.Designer.cs b/COP/PutincevLibrary/TreeViewControl.Designer.cs
new file mode 100644
index 0000000..3af5892
--- /dev/null
+++ b/COP/PutincevLibrary/TreeViewControl.Designer.cs
@@ -0,0 +1,55 @@
+namespace PutincevLibrary
+{
+ partial class TreeViewControl
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ 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.Dock = DockStyle.Fill;
+ treeView.Location = new Point(0, 0);
+ treeView.Name = "treeView";
+ treeView.Size = new Size(150, 150);
+ treeView.TabIndex = 0;
+ //
+ // TreeViewControl
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(treeView);
+ Name = "TreeViewControl";
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private TreeView treeView;
+ }
+}
diff --git a/COP/PutincevLibrary/TreeViewControl.cs b/COP/PutincevLibrary/TreeViewControl.cs
new file mode 100644
index 0000000..a4023a8
--- /dev/null
+++ b/COP/PutincevLibrary/TreeViewControl.cs
@@ -0,0 +1,117 @@
+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;
+using PutincevLibrary.Exceptions;
+using PutincevLibrary.Attributes;
+
+namespace PutincevLibrary
+{
+ public partial class TreeViewControl : UserControl
+ {
+ public TreeViewControl()
+ {
+ InitializeComponent();
+ }
+
+ public List<(string, bool)> hierarchy = new List<(string, bool)>();
+
+ public int SelectedNodeIndex
+ {
+ get
+ {
+ return treeView.SelectedNode?.Index ?? -1;
+ }
+ set
+ {
+ if (treeView.SelectedNode == null) treeView.SelectedNode = value >= 0 && value < treeView.Nodes.Count ? treeView.Nodes[value] : treeView.SelectedNode;
+ else treeView.SelectedNode = value >= 0 && value < treeView.SelectedNode.Nodes.Count ? treeView.SelectedNode.Nodes[value] : treeView.SelectedNode;
+ }
+ }
+
+ public T? getSelecetedNodeValue()
+ where T : class, new()
+ {
+ var node = treeView.SelectedNode;
+
+ if (node == null)
+ {
+ throw new NotSelectedNodeException();
+ }
+
+ if ((hierarchy?.Count ?? 0) == 0)
+ {
+ throw new TreeHierarchyNotSetException();
+ }
+
+ if (node.Nodes.Count > 0)
+ {
+ throw new NodeIsNotLeafException();
+ }
+
+ T obj = new T();
+ int propIndex = GetNodeDepth(node);
+ while (node != null)
+ {
+ string propValue = node.Text;
+ string propName = hierarchy[propIndex].Item1;
+
+ var prop = obj.GetType().GetProperty(propName);
+ if (prop == null)
+ {
+ throw new PropertyNotDeclaratedException(propName);
+ }
+
+ prop.SetValue(obj, propValue);
+
+ node = node.Parent;
+ propIndex--;
+ }
+
+ return obj;
+ }
+ private int GetNodeDepth(TreeNode node)
+ {
+ int depth = 0;
+ while (node.Parent != null)
+ {
+ depth++;
+ node = node.Parent;
+ }
+ return depth;
+ }
+
+ public void addItems(List items)
+ {
+ var type = typeof(T);
+ var fields = type.GetFields();
+ foreach (T item in items)
+ {
+ TreeNodeCollection nodes = treeView.Nodes;
+ for (int i = 0; i < hierarchy.Count; i++)
+ {
+ var field = fields.FirstOrDefault(x => x.Name.Equals(hierarchy[i].Item1));
+ if (field is not null)
+ {
+ var node = nodes.Find(field.Name, false).FirstOrDefault(x => x.Text == field.GetValue(item).ToString());
+ if (node is not null && !hierarchy[i].Item2)
+ {
+ nodes = node.Nodes;
+ }
+ else
+ {
+ TreeNode newNode = nodes.Add(field.Name, field.GetValue(item).ToString());
+ nodes = newNode.Nodes;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/COP/PutincevLibrary/TreeViewControl.resx b/COP/PutincevLibrary/TreeViewControl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/COP/PutincevLibrary/TreeViewControl.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/WinForms/Form1.Designer.cs b/COP/WinForms/Form1.Designer.cs
index 9c55f6b..84c302c 100644
--- a/COP/WinForms/Form1.Designer.cs
+++ b/COP/WinForms/Form1.Designer.cs
@@ -20,20 +20,88 @@
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()
- {
- this.components = new System.ComponentModel.Container();
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
- this.Text = "Form1";
- }
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ buttonClearList = new Button();
+ buttonFillCheckedList = new Button();
+ checkedListBoxControl = new PutincevLibrary.CheckedListBoxControl();
+ treeViewControl = new PutincevLibrary.TreeViewControl();
+ dateTimePickerControl = new PutincevLibrary.DateTimePickerControl();
+ SuspendLayout();
+ //
+ // buttonClearList
+ //
+ buttonClearList.Location = new Point(150, 149);
+ buttonClearList.Margin = new Padding(3, 4, 3, 4);
+ buttonClearList.Name = "buttonClearList";
+ buttonClearList.Size = new Size(86, 31);
+ buttonClearList.TabIndex = 4;
+ buttonClearList.Text = "Очистить";
+ buttonClearList.UseVisualStyleBackColor = true;
+ buttonClearList.Click += buttonClearList_Click;
+ //
+ // buttonFillCheckedList
+ //
+ buttonFillCheckedList.Location = new Point(44, 149);
+ buttonFillCheckedList.Margin = new Padding(3, 4, 3, 4);
+ buttonFillCheckedList.Name = "buttonFillCheckedList";
+ buttonFillCheckedList.Size = new Size(100, 31);
+ buttonFillCheckedList.TabIndex = 3;
+ buttonFillCheckedList.Text = "Заполнить";
+ buttonFillCheckedList.UseVisualStyleBackColor = true;
+ buttonFillCheckedList.Click += buttonFillCheckedList_Click;
+ //
+ // checkedListBoxControl
+ //
+ checkedListBoxControl.Location = new Point(48, 14);
+ checkedListBoxControl.Name = "checkedListBoxControl";
+ checkedListBoxControl.Size = new Size(188, 117);
+ checkedListBoxControl.TabIndex = 5;
+ //
+ // treeViewControl
+ //
+ treeViewControl.hierarchy = null;
+ treeViewControl.Location = new Point(570, 12);
+ treeViewControl.Name = "treeViewControl";
+ treeViewControl.Size = new Size(188, 188);
+ treeViewControl.TabIndex = 7;
+ //
+ // dateTimePickerControl
+ //
+ dateTimePickerControl.Location = new Point(278, 38);
+ dateTimePickerControl.MaxValue = null;
+ dateTimePickerControl.MinValue = null;
+ dateTimePickerControl.Name = "dateTimePickerControl";
+ dateTimePickerControl.Size = new Size(188, 32);
+ dateTimePickerControl.TabIndex = 8;
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(dateTimePickerControl);
+ Controls.Add(treeViewControl);
+ Controls.Add(checkedListBoxControl);
+ Controls.Add(buttonClearList);
+ Controls.Add(buttonFillCheckedList);
+ Name = "Form1";
+ Text = "Form1";
+ ResumeLayout(false);
+ }
- #endregion
- }
+ #endregion
+
+ private Button buttonClearList;
+ private Button buttonFillCheckedList;
+ private PutincevLibrary.CheckedListBoxControl checkedListBoxControl;
+ private PutincevLibrary.TreeViewControl treeViewControl;
+ private PutincevLibrary.DateTimePickerControl dateTimePickerControl;
+ }
}
diff --git a/COP/WinForms/Form1.cs b/COP/WinForms/Form1.cs
index f15d6ef..1487a72 100644
--- a/COP/WinForms/Form1.cs
+++ b/COP/WinForms/Form1.cs
@@ -1,10 +1,52 @@
+using WinForms.TestClasses;
+using PutincevLibrary;
+
namespace WinForms
{
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- }
+ public partial class Form1 : Form
+ {
+ List users = new List();
+ public Form1()
+ {
+ DateTime min = DateTime.Parse("2009-05-08");
+ DateTime max = DateTime.Today;
+ User user1 = new User(" .", "", "");
+ User user2 = new User(" .", "", "");
+ User user3 = new User(" .", "", " ");
+ User user4 = new User(" .", "", "");
+ User user5 = new User(" .", "", "");
+ users.Add(user1);
+ users.Add(user2);
+ users.Add(user3);
+ users.Add(user4);
+ users.Add(user5);
+ InitializeComponent();
+ dateTimePickerControl.MaxValue = max;
+ dateTimePickerControl.MinValue = min;
+ treeViewControl.hierarchy = new List<(string, bool)> { ("Country", false), ("AccessLevel", false), ("FIO", false) };
+ foreach (User user in users)
+ {
+ treeViewControl.addItems(users);
+ }
+
+ }
+
+ private void buttonFillCheckedList_Click(object sender, EventArgs e)
+ {
+ List list = new List();
+ list.Add("");
+ list.Add("");
+ list.Add("");
+ list.Add("");
+ list.Add("");
+ checkedListBoxControl.SetCheckedListBoxValues(list);
+
+ checkedListBoxControl.CheckedItem = list[2];
+ }
+
+ private void buttonClearList_Click(object sender, EventArgs e)
+ {
+ checkedListBoxControl.ClearCheckedListBoxValues();
+ }
+ }
}
diff --git a/COP/WinForms/Form1.resx b/COP/WinForms/Form1.resx
index 1af7de1..af32865 100644
--- a/COP/WinForms/Form1.resx
+++ b/COP/WinForms/Form1.resx
@@ -1,17 +1,17 @@
-
diff --git a/COP/WinForms/TestClasses/User.cs b/COP/WinForms/TestClasses/User.cs
new file mode 100644
index 0000000..a88ec31
--- /dev/null
+++ b/COP/WinForms/TestClasses/User.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using PutincevLibrary.Attributes;
+namespace WinForms.TestClasses
+{
+ public class User
+ {
+ [AlwaysCreate]
+ public string FIO { get; set; }
+ public string AccessLevel { get; set; }
+ public string Country { get; set; }
+ public User(string fio, string acc, string cou) {
+ FIO = fio;
+ AccessLevel = acc;
+ Country = cou;
+ }
+ public User() { }
+ }
+}
diff --git a/COP/WinForms/WinForms.csproj b/COP/WinForms/WinForms.csproj
index b57c89e..8ba1fc4 100644
--- a/COP/WinForms/WinForms.csproj
+++ b/COP/WinForms/WinForms.csproj
@@ -8,4 +8,8 @@
enable
+
+
+
+
\ No newline at end of file