This commit is contained in:
GokaPek 2024-09-15 23:53:12 +04:00
parent 11c1ae95fb
commit 918cbc514b
9 changed files with 187 additions and 104 deletions

View File

@ -29,7 +29,8 @@
private void InitializeComponent()
{
chooseList1 = new Library14Petrushin.ChooseList();
rangeTextBox1 = new Library14Petrushin.RangeTextBox();
hierarchicalTreeView1 = new Library14Petrushin.HierarchicalTreeView();
textBoxRange1 = new Library14Petrushin.TextBoxRange();
SuspendLayout();
//
// chooseList1
@ -40,21 +41,28 @@
chooseList1.Size = new Size(185, 190);
chooseList1.TabIndex = 0;
//
// rangeTextBox1
// hierarchicalTreeView1
//
rangeTextBox1.Location = new Point(259, 14);
rangeTextBox1.MaxLength = 0;
rangeTextBox1.MinLength = 0;
rangeTextBox1.Name = "rangeTextBox1";
rangeTextBox1.Size = new Size(188, 188);
rangeTextBox1.TabIndex = 1;
hierarchicalTreeView1.Location = new Point(567, 2);
hierarchicalTreeView1.Name = "hierarchicalTreeView1";
hierarchicalTreeView1.SelectedNodeIndex = -1;
hierarchicalTreeView1.Size = new Size(266, 504);
hierarchicalTreeView1.TabIndex = 2;
//
// textBoxRange1
//
textBoxRange1.Location = new Point(233, 24);
textBoxRange1.Name = "textBoxRange1";
textBoxRange1.Size = new Size(259, 66);
textBoxRange1.TabIndex = 3;
//
// Form1
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(rangeTextBox1);
ClientSize = new Size(834, 507);
Controls.Add(textBoxRange1);
Controls.Add(hierarchicalTreeView1);
Controls.Add(chooseList1);
Name = "Form1";
Text = "Form1";
@ -64,6 +72,8 @@
#endregion
private Library14Petrushin.ChooseList chooseList1;
private Library14Petrushin.HierarchicalTreeView hierarchicalTreeView1;
private Library14Petrushin.RangeTextBox rangeTextBox1;
private Library14Petrushin.TextBoxRange textBoxRange1;
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Library14Petrushin.Classes
{
public class Employee
{
public string? Department { get; set; }
public string? Position { get; set; }
public string? FullName { get; set; }
}
}

View File

@ -1,6 +1,6 @@
namespace Library14Petrushin
{
partial class TreeViewIerarch
partial class HierarchicalTreeView
{
/// <summary>
/// Обязательная переменная конструктора.
@ -28,10 +28,28 @@
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
treeView1 = new TreeView();
SuspendLayout();
//
// treeView1
//
treeView1.Location = new Point(3, 3);
treeView1.Name = "treeView1";
treeView1.Size = new Size(258, 496);
treeView1.TabIndex = 0;
//
// TreeViewIerarch
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(treeView1);
Name = "TreeViewIerarch";
Size = new Size(264, 502);
ResumeLayout(false);
}
#endregion
private TreeView treeView1;
}
}

View File

@ -0,0 +1,98 @@
using Library14Petrushin.Classes;
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 Library14Petrushin
{
public partial class HierarchicalTreeView : UserControl
{
private List<string> hierarchy;
private Dictionary<string, bool> alwaysNewBranch;
public HierarchicalTreeView()
{
InitializeComponent();
hierarchy = new List<string>();
alwaysNewBranch = new Dictionary<string, bool>();
}
public void SetHierarchy(List<string> hierarchy, Dictionary<string, bool> alwaysNewBranch)
{
this.hierarchy = hierarchy;
this.alwaysNewBranch = alwaysNewBranch;
}
public void AddObjectToTree(object obj, string stopAtProperty)
{
TreeNode currentNode = treeView1.Nodes.Cast<TreeNode>().FirstOrDefault();
foreach (var property in hierarchy)
{
var value = obj.GetType().GetProperty(property).GetValue(obj, null).ToString();
bool createNewBranch = alwaysNewBranch.ContainsKey(property) && alwaysNewBranch[property];
if (currentNode == null)
{
currentNode = treeView1.Nodes.Add(value);
}
else
{
var childNode = currentNode.Nodes.Cast<TreeNode>().FirstOrDefault(n => n.Text == value);
if (childNode == null || createNewBranch)
{
childNode = currentNode.Nodes.Add(value);
}
currentNode = childNode;
}
if (property == stopAtProperty)
{
break;
}
}
}
public int SelectedNodeIndex
{
get
{
return treeView1.SelectedNode?.Index ?? -1;
}
set
{
if (value >= 0 && value < treeView1.Nodes.Count)
{
treeView1.SelectedNode = treeView1.Nodes[value];
}
}
}
public object GetSelectedObject()
{
if (treeView1.SelectedNode == null)
{
return null;
}
var node = treeView1.SelectedNode;
var obj = Activator.CreateInstance(typeof(Employee));
foreach (var property in hierarchy)
{
var value = node.Text;
obj.GetType().GetProperty(property).SetValue(obj, value);
node = node.Parent;
if (node == null)
{
break;
}
}
return obj;
}
}
}

View File

@ -1,57 +0,0 @@
using Library14Petrushin.Exeptions;
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 Library14Petrushin
{
public partial class RangeTextBox : UserControl
{
public int MinLength { get; set; }
public int MaxLength { get; set; }
public event EventHandler? ValueChanged;
public string InputValue
{
get
{
if (MinLength == 0 && MaxLength == 0)
{
throw new RangeException("Диапазон не задан.");
}
if (textBox1.Text.Length < MinLength || textBox1.Text.Length > MaxLength)
{
throw new RangeException("Введенное значение не входит в диапазон.");
}
return textBox1.Text;
}
set
{
if (MinLength != 0 && MaxLength != 0)
{
if (value.Length >= MinLength && value.Length <= MaxLength)
{
textBox1.Text = value;
ValueChanged?.Invoke(this, EventArgs.Empty);
}
}
else
{
throw new RangeException("Диапазон не задан.");
}
}
}
private void TextBox1_TextChanged(object sender, EventArgs e)
{
ValueChanged?.Invoke(this, e);
}
}
}

View File

@ -1,6 +1,6 @@
namespace Library14Petrushin
{
partial class RangeTextBox
partial class TextBoxRange
{
/// <summary>
/// Обязательная переменная конструктора.
@ -33,19 +33,18 @@
//
// textBox1
//
textBox1.Location = new Point(0, 3);
textBox1.Location = new Point(3, 14);
textBox1.Name = "textBox1";
textBox1.Size = new Size(270, 27);
textBox1.Size = new Size(243, 27);
textBox1.TabIndex = 0;
textBox1.TextChanged += TextBox1_TextChanged;
//
// RangeTextBox
// TextBoxRange
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(textBox1);
Name = "RangeTextBox";
Size = new Size(273, 37);
Name = "TextBoxRange";
Size = new Size(252, 53);
ResumeLayout(false);
PerformLayout();
}

View File

@ -10,9 +10,9 @@ using System.Windows.Forms;
namespace Library14Petrushin
{
public partial class TreeViewIerarch : UserControl
public partial class TextBoxRange : UserControl
{
public TreeViewIerarch()
public TextBoxRange()
{
InitializeComponent();
}