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