готово\
This commit is contained in:
parent
e73a259ccb
commit
5c0fdc3ee1
@ -1,10 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net6.0-windows</TargetFramework>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
@ -1,125 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace Component_1
|
|
||||||
{
|
|
||||||
public partial class List_with_choice : UserControl
|
|
||||||
{
|
|
||||||
private event EventHandler? _checkedlistChanged;
|
|
||||||
private event Action? _errorOccured;
|
|
||||||
public string Error { get; private set; }
|
|
||||||
|
|
||||||
public String Element
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (checkedListBox1.SelectedItem != null) return checkedListBox1.SelectedItem.ToString();
|
|
||||||
else return string.Empty;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
checkedListBox1.SelectedItem = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public event EventHandler Checkedlist
|
|
||||||
{
|
|
||||||
add { _checkedlistChanged += value; }
|
|
||||||
remove { _checkedlistChanged -= value; }
|
|
||||||
}
|
|
||||||
public event Action AnErrorOccurred
|
|
||||||
{
|
|
||||||
add { _errorOccured += value; }
|
|
||||||
remove { _errorOccured -= value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public List_with_choice()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
Error = string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Fill_List(string str) //метод заполнения списка
|
|
||||||
{
|
|
||||||
if (str == null)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Вы не ввели строку");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string[] list = str.Split(' ');
|
|
||||||
foreach (string s in list)
|
|
||||||
{
|
|
||||||
checkedListBox1.Items.Add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void Clean_List() //метод очистки списка
|
|
||||||
{
|
|
||||||
checkedListBox1.Items.Clear();
|
|
||||||
}
|
|
||||||
private void button_Load_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
string value = "";
|
|
||||||
if (InputBox("Заполнение списка", "Пожалуйста введите строку", ref value) == DialogResult.OK)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Fill_List(value);
|
|
||||||
_checkedlistChanged?.Invoke(this, e);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Error = ex.Message;
|
|
||||||
_errorOccured?.Invoke();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
public static DialogResult InputBox(string title, string promptText, ref string value)//диалоговое окно
|
|
||||||
{
|
|
||||||
Form form = new Form();
|
|
||||||
Label label = new Label();
|
|
||||||
TextBox textBox = new TextBox();
|
|
||||||
Button buttonOk = new Button();
|
|
||||||
Button buttonCancel = new Button();
|
|
||||||
form.Text = title;
|
|
||||||
label.Text = promptText;
|
|
||||||
buttonOk.Text = "OK";
|
|
||||||
buttonCancel.Text = "Cancel";
|
|
||||||
buttonOk.DialogResult = DialogResult.OK;
|
|
||||||
buttonCancel.DialogResult = DialogResult.Cancel;
|
|
||||||
label.SetBounds(36, 36, 372, 13);
|
|
||||||
textBox.SetBounds(36, 86, 700, 20);
|
|
||||||
buttonOk.SetBounds(228, 160, 160, 60);
|
|
||||||
buttonCancel.SetBounds(400, 160, 160, 60);
|
|
||||||
label.AutoSize = true;
|
|
||||||
form.ClientSize = new Size(796, 307);
|
|
||||||
form.FormBorderStyle = FormBorderStyle.FixedDialog;
|
|
||||||
form.StartPosition = FormStartPosition.CenterScreen;
|
|
||||||
form.MinimizeBox = false;
|
|
||||||
form.MaximizeBox = false;
|
|
||||||
form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
|
|
||||||
form.AcceptButton = buttonOk;
|
|
||||||
form.CancelButton = buttonCancel;
|
|
||||||
DialogResult dialogResult = form.ShowDialog();
|
|
||||||
value = textBox.Text;
|
|
||||||
return dialogResult;
|
|
||||||
}
|
|
||||||
private void button_Clean_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Clean_List();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
57
Components/Form1.Designer.cs
generated
57
Components/Form1.Designer.cs
generated
@ -1,57 +0,0 @@
|
|||||||
namespace Components
|
|
||||||
{
|
|
||||||
partial class Form1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
list_with_choice1 = new Component_1.List_with_choice();
|
|
||||||
SuspendLayout();
|
|
||||||
//
|
|
||||||
// list_with_choice1
|
|
||||||
//
|
|
||||||
list_with_choice1.Element = "";
|
|
||||||
list_with_choice1.Location = new Point(131, 60);
|
|
||||||
list_with_choice1.Name = "list_with_choice1";
|
|
||||||
list_with_choice1.Size = new Size(464, 248);
|
|
||||||
list_with_choice1.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// Form1
|
|
||||||
//
|
|
||||||
AutoScaleDimensions = new SizeF(8F, 20F);
|
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
|
||||||
ClientSize = new Size(800, 450);
|
|
||||||
Controls.Add(list_with_choice1);
|
|
||||||
Name = "Form1";
|
|
||||||
Text = "Form1";
|
|
||||||
ResumeLayout(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private Component_1.List_with_choice list_with_choice1;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace Components
|
|
||||||
{
|
|
||||||
public partial class Form1 : Form
|
|
||||||
{
|
|
||||||
public Form1()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
29
TestView/Book.cs
Normal file
29
TestView/Book.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace TestView
|
||||||
|
{
|
||||||
|
public class Book
|
||||||
|
{
|
||||||
|
public string Genre;
|
||||||
|
public string Author;
|
||||||
|
public string Title;
|
||||||
|
|
||||||
|
public Book(string Genre, string Author, string Title)
|
||||||
|
{
|
||||||
|
this.Genre = Genre;
|
||||||
|
this.Author = Author;
|
||||||
|
this.Title = Title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Book()
|
||||||
|
{
|
||||||
|
Genre = string.Empty;
|
||||||
|
Author = string.Empty;
|
||||||
|
Title= string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
226
TestView/Form1.Designer.cs
generated
Normal file
226
TestView/Form1.Designer.cs
generated
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
namespace TestView
|
||||||
|
{
|
||||||
|
partial class Form1
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
buttonAdd = new Button();
|
||||||
|
buttonClear = new Button();
|
||||||
|
buttonSelect = new Button();
|
||||||
|
list_with_choice = new ViewComponents.List_with_choice();
|
||||||
|
input_text = new ViewComponents.Input_text();
|
||||||
|
buttonDip = new Button();
|
||||||
|
buttonVal = new Button();
|
||||||
|
buttonCheck = new Button();
|
||||||
|
buttonIerarhy = new Button();
|
||||||
|
buttonAddBook = new Button();
|
||||||
|
buttonGetValue = new Button();
|
||||||
|
buttonGetIndex = new Button();
|
||||||
|
buttonSetIndex = new Button();
|
||||||
|
myTreeView = new ViewComponents.MyTreeView();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// buttonAdd
|
||||||
|
//
|
||||||
|
buttonAdd.Location = new Point(25, 137);
|
||||||
|
buttonAdd.Name = "buttonAdd";
|
||||||
|
buttonAdd.Size = new Size(94, 29);
|
||||||
|
buttonAdd.TabIndex = 1;
|
||||||
|
buttonAdd.Text = "Добавить";
|
||||||
|
buttonAdd.UseVisualStyleBackColor = true;
|
||||||
|
buttonAdd.Click += buttonAdd_Click;
|
||||||
|
//
|
||||||
|
// buttonClear
|
||||||
|
//
|
||||||
|
buttonClear.Location = new Point(163, 137);
|
||||||
|
buttonClear.Name = "buttonClear";
|
||||||
|
buttonClear.Size = new Size(94, 29);
|
||||||
|
buttonClear.TabIndex = 2;
|
||||||
|
buttonClear.Text = "Очистить";
|
||||||
|
buttonClear.UseVisualStyleBackColor = true;
|
||||||
|
buttonClear.Click += buttonClear_Click;
|
||||||
|
//
|
||||||
|
// buttonSelect
|
||||||
|
//
|
||||||
|
buttonSelect.Location = new Point(60, 172);
|
||||||
|
buttonSelect.Name = "buttonSelect";
|
||||||
|
buttonSelect.Size = new Size(163, 29);
|
||||||
|
buttonSelect.TabIndex = 3;
|
||||||
|
buttonSelect.Text = "Выбранный элемент";
|
||||||
|
buttonSelect.UseVisualStyleBackColor = true;
|
||||||
|
buttonSelect.Click += buttonSelect_Click;
|
||||||
|
//
|
||||||
|
// list_with_choice
|
||||||
|
//
|
||||||
|
list_with_choice.Element = "";
|
||||||
|
list_with_choice.Location = new Point(25, 12);
|
||||||
|
list_with_choice.Name = "list_with_choice";
|
||||||
|
list_with_choice.Size = new Size(232, 119);
|
||||||
|
list_with_choice.TabIndex = 4;
|
||||||
|
list_with_choice.SelectedItemChange += list_with_choice_SelectedItemChange;
|
||||||
|
//
|
||||||
|
// input_text
|
||||||
|
//
|
||||||
|
input_text.Location = new Point(312, 12);
|
||||||
|
input_text.MaxLen = null;
|
||||||
|
input_text.MinLen = null;
|
||||||
|
input_text.Name = "input_text";
|
||||||
|
input_text.Size = new Size(240, 119);
|
||||||
|
input_text.TabIndex = 5;
|
||||||
|
input_text.ItemChange += input_text_ItemChange;
|
||||||
|
//
|
||||||
|
// buttonDip
|
||||||
|
//
|
||||||
|
buttonDip.Location = new Point(312, 137);
|
||||||
|
buttonDip.Name = "buttonDip";
|
||||||
|
buttonDip.Size = new Size(94, 29);
|
||||||
|
buttonDip.TabIndex = 6;
|
||||||
|
buttonDip.Text = "Диапазон";
|
||||||
|
buttonDip.UseVisualStyleBackColor = true;
|
||||||
|
buttonDip.Click += buttonDip_Click;
|
||||||
|
//
|
||||||
|
// buttonVal
|
||||||
|
//
|
||||||
|
buttonVal.Location = new Point(458, 137);
|
||||||
|
buttonVal.Name = "buttonVal";
|
||||||
|
buttonVal.Size = new Size(94, 29);
|
||||||
|
buttonVal.TabIndex = 7;
|
||||||
|
buttonVal.Text = "Значение";
|
||||||
|
buttonVal.UseVisualStyleBackColor = true;
|
||||||
|
buttonVal.Click += buttonVal_Click;
|
||||||
|
//
|
||||||
|
// buttonCheck
|
||||||
|
//
|
||||||
|
buttonCheck.Location = new Point(360, 172);
|
||||||
|
buttonCheck.Name = "buttonCheck";
|
||||||
|
buttonCheck.Size = new Size(143, 29);
|
||||||
|
buttonCheck.TabIndex = 8;
|
||||||
|
buttonCheck.Text = " Проверка текста";
|
||||||
|
buttonCheck.UseVisualStyleBackColor = true;
|
||||||
|
buttonCheck.Click += buttonCheck_Click;
|
||||||
|
//
|
||||||
|
// buttonIerarhy
|
||||||
|
//
|
||||||
|
buttonIerarhy.Location = new Point(652, 32);
|
||||||
|
buttonIerarhy.Name = "buttonIerarhy";
|
||||||
|
buttonIerarhy.Size = new Size(168, 29);
|
||||||
|
buttonIerarhy.TabIndex = 10;
|
||||||
|
buttonIerarhy.Text = "Задать иерархию";
|
||||||
|
buttonIerarhy.UseVisualStyleBackColor = true;
|
||||||
|
buttonIerarhy.Click += buttonIerarhy_Click;
|
||||||
|
//
|
||||||
|
// buttonAddBook
|
||||||
|
//
|
||||||
|
buttonAddBook.Location = new Point(652, 67);
|
||||||
|
buttonAddBook.Name = "buttonAddBook";
|
||||||
|
buttonAddBook.Size = new Size(168, 29);
|
||||||
|
buttonAddBook.TabIndex = 11;
|
||||||
|
buttonAddBook.Text = "Добавить книги";
|
||||||
|
buttonAddBook.UseVisualStyleBackColor = true;
|
||||||
|
buttonAddBook.Click += buttonAddBook_Click;
|
||||||
|
//
|
||||||
|
// buttonGetValue
|
||||||
|
//
|
||||||
|
buttonGetValue.Location = new Point(652, 102);
|
||||||
|
buttonGetValue.Name = "buttonGetValue";
|
||||||
|
buttonGetValue.Size = new Size(168, 29);
|
||||||
|
buttonGetValue.TabIndex = 12;
|
||||||
|
buttonGetValue.Text = "Получить значение";
|
||||||
|
buttonGetValue.UseVisualStyleBackColor = true;
|
||||||
|
buttonGetValue.Click += buttonGetValue_Click;
|
||||||
|
//
|
||||||
|
// buttonGetIndex
|
||||||
|
//
|
||||||
|
buttonGetIndex.Location = new Point(652, 137);
|
||||||
|
buttonGetIndex.Name = "buttonGetIndex";
|
||||||
|
buttonGetIndex.Size = new Size(168, 29);
|
||||||
|
buttonGetIndex.TabIndex = 13;
|
||||||
|
buttonGetIndex.Text = "Получить индекс";
|
||||||
|
buttonGetIndex.UseVisualStyleBackColor = true;
|
||||||
|
buttonGetIndex.Click += buttonGetIndex_Click;
|
||||||
|
//
|
||||||
|
// buttonSetIndex
|
||||||
|
//
|
||||||
|
buttonSetIndex.Location = new Point(652, 172);
|
||||||
|
buttonSetIndex.Name = "buttonSetIndex";
|
||||||
|
buttonSetIndex.Size = new Size(168, 29);
|
||||||
|
buttonSetIndex.TabIndex = 14;
|
||||||
|
buttonSetIndex.Text = "Установить индекс";
|
||||||
|
buttonSetIndex.UseVisualStyleBackColor = true;
|
||||||
|
buttonSetIndex.Click += buttonSetIndex_Click;
|
||||||
|
//
|
||||||
|
// myTreeView
|
||||||
|
//
|
||||||
|
myTreeView.Location = new Point(629, 218);
|
||||||
|
myTreeView.Name = "myTreeView";
|
||||||
|
myTreeView.SelectedNodeIndex = -1;
|
||||||
|
myTreeView.Size = new Size(226, 204);
|
||||||
|
myTreeView.TabIndex = 8;
|
||||||
|
//
|
||||||
|
// Form1
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(909, 450);
|
||||||
|
Controls.Add(myTreeView);
|
||||||
|
Controls.Add(buttonSetIndex);
|
||||||
|
Controls.Add(buttonGetIndex);
|
||||||
|
Controls.Add(buttonGetValue);
|
||||||
|
Controls.Add(buttonAddBook);
|
||||||
|
Controls.Add(buttonIerarhy);
|
||||||
|
Controls.Add(buttonCheck);
|
||||||
|
Controls.Add(buttonVal);
|
||||||
|
Controls.Add(buttonDip);
|
||||||
|
Controls.Add(input_text);
|
||||||
|
Controls.Add(list_with_choice);
|
||||||
|
Controls.Add(buttonSelect);
|
||||||
|
Controls.Add(buttonClear);
|
||||||
|
Controls.Add(buttonAdd);
|
||||||
|
Name = "Form1";
|
||||||
|
Text = "Form1";
|
||||||
|
Load += Form1_Load;
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private Button buttonAdd;
|
||||||
|
private Button buttonClear;
|
||||||
|
private Button buttonSelect;
|
||||||
|
private ViewComponents.List_with_choice list_with_choice;
|
||||||
|
private ViewComponents.Input_text input_text;
|
||||||
|
private Button buttonDip;
|
||||||
|
private Button buttonVal;
|
||||||
|
private Button buttonCheck;
|
||||||
|
private Button buttonIerarhy;
|
||||||
|
private Button buttonAddBook;
|
||||||
|
private Button buttonGetValue;
|
||||||
|
private Button buttonGetIndex;
|
||||||
|
private Button buttonSetIndex;
|
||||||
|
private ViewComponents.MyTreeView myTreeView;
|
||||||
|
}
|
||||||
|
}
|
106
TestView/Form1.cs
Normal file
106
TestView/Form1.cs
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
using ViewComponents.Exeption;
|
||||||
|
|
||||||
|
namespace TestView
|
||||||
|
{
|
||||||
|
public partial class Form1 : Form
|
||||||
|
{
|
||||||
|
public Form1()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonAdd_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string str = "ïåðâûé âòîðîé òðåòèé ÷åòâ¸ðòûé";
|
||||||
|
|
||||||
|
list_with_choice.Fill_List(str);
|
||||||
|
list_with_choice.Element = "ïåðâûé";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonClear_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
list_with_choice.Clean_List();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonSelect_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
MessageBox.Show(list_with_choice.Element ?? "null", "Âûáðàííûé ýëåìåíò");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void list_with_choice_SelectedItemChange(string obj)
|
||||||
|
{
|
||||||
|
MessageBox.Show(obj, "Ñîáûòèå âûáîðà ýëåìåíòà");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonDip_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
input_text.MinLen = 5;
|
||||||
|
input_text.MaxLen = 25;
|
||||||
|
|
||||||
|
MessageBox.Show($"Min: {input_text.minlen}; Max: {input_text.maxlen}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonVal_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
input_text.Element = "Ïðîâåðêà";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void input_text_ItemChange(string obj)
|
||||||
|
{
|
||||||
|
MessageBox.Show(obj, "Ñîáûòèå èçìåíåíèÿ òåêñòà");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonCheck_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string val = input_text.Element;
|
||||||
|
MessageBox.Show(val, "×åðåç ñâîéñòâî");
|
||||||
|
}
|
||||||
|
catch (TextBoundsNotSetExeption ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
}
|
||||||
|
catch (TextOutOfBoundsExeption ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonIerarhy_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
myTreeView.setHierarchy(new List<(string, bool)> { ("Genre", false), ("Author", false), ("Title", true) });
|
||||||
|
MessageBox.Show("Èåðàðõèÿ çàäàíà");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonAddBook_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
myTreeView.addItem(new Book("Ðîìàí", "Ãîãîëü Í.Â.", "̸ðòâûå äóøè"));
|
||||||
|
myTreeView.addItem(new Book("Ðîìàí", "Òóðãåíåâ È.Ñ.", "Îòöû è äåòè"));
|
||||||
|
myTreeView.addItem(new Book("Ôàíòàñòèêà", "Äæîðäæ Îðóýëë", "1984"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonGetValue_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Book? book = myTreeView.getSelecetedNodeValue<Book>();
|
||||||
|
if (book == null) return;
|
||||||
|
MessageBox.Show("Æàíð: " + book.Genre + ", Àâòîð: " + book.Author + ", Íàçâàíèå: " + book.Title);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonGetIndex_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
MessageBox.Show(myTreeView.SelectedNodeIndex.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonSetIndex_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
myTreeView.SelectedNodeIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Form1_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace Components
|
namespace TestView
|
||||||
{
|
{
|
||||||
internal static class Program
|
internal static class Program
|
||||||
{
|
{
|
22
TestView/TestView.csproj
Normal file
22
TestView/TestView.csproj
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net6.0-windows</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<RootNamespace>TestView</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ViewComponents\ViewComponents.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Program.cs">
|
||||||
|
<CustomToolNamespace></CustomToolNamespace>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.5.33627.172
|
VisualStudioVersion = 17.5.33627.172
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Components", "Components.csproj", "{637B2B5F-8015-4DE8-B264-74F24B115812}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestView", "TestView.csproj", "{637B2B5F-8015-4DE8-B264-74F24B115812}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Component_1", "..\Component_1\Component_1.csproj", "{9E53BE81-4309-40C4-B6F8-0C80756EE09E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ViewComponents", "..\ViewComponents\ViewComponents.csproj", "{45A652EE-B79B-4F5B-BB2A-2A51F5BEA2F1}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -17,10 +17,10 @@ Global
|
|||||||
{637B2B5F-8015-4DE8-B264-74F24B115812}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{637B2B5F-8015-4DE8-B264-74F24B115812}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{637B2B5F-8015-4DE8-B264-74F24B115812}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{637B2B5F-8015-4DE8-B264-74F24B115812}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{637B2B5F-8015-4DE8-B264-74F24B115812}.Release|Any CPU.Build.0 = Release|Any CPU
|
{637B2B5F-8015-4DE8-B264-74F24B115812}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{9E53BE81-4309-40C4-B6F8-0C80756EE09E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{45A652EE-B79B-4F5B-BB2A-2A51F5BEA2F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{9E53BE81-4309-40C4-B6F8-0C80756EE09E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{45A652EE-B79B-4F5B-BB2A-2A51F5BEA2F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{9E53BE81-4309-40C4-B6F8-0C80756EE09E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{45A652EE-B79B-4F5B-BB2A-2A51F5BEA2F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{9E53BE81-4309-40C4-B6F8-0C80756EE09E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{45A652EE-B79B-4F5B-BB2A-2A51F5BEA2F1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
18
ViewComponents/Exeption/TextBoundsNotSetExeption.cs
Normal file
18
ViewComponents/Exeption/TextBoundsNotSetExeption.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ViewComponents.Exeption
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class TextBoundsNotSetExeption: ApplicationException
|
||||||
|
{
|
||||||
|
public TextBoundsNotSetExeption() : base() { }
|
||||||
|
public TextBoundsNotSetExeption(string message) : base(message) { }
|
||||||
|
public TextBoundsNotSetExeption(string message, Exception exception) : base(message, exception) { }
|
||||||
|
protected TextBoundsNotSetExeption(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||||
|
}
|
||||||
|
}
|
18
ViewComponents/Exeption/TextOutOfBoundsExeption.cs
Normal file
18
ViewComponents/Exeption/TextOutOfBoundsExeption.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ViewComponents.Exeption
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class TextOutOfBoundsExeption: ApplicationException
|
||||||
|
{
|
||||||
|
public TextOutOfBoundsExeption() : base() { }
|
||||||
|
public TextOutOfBoundsExeption(string message) : base(message) { }
|
||||||
|
public TextOutOfBoundsExeption(string message, Exception exception) : base(message, exception) { }
|
||||||
|
protected TextOutOfBoundsExeption(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||||
|
}
|
||||||
|
}
|
58
ViewComponents/Input_text.Designer.cs
generated
Normal file
58
ViewComponents/Input_text.Designer.cs
generated
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
namespace ViewComponents
|
||||||
|
{
|
||||||
|
partial class Input_text
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Обязательная переменная конструктора.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Освободить все используемые ресурсы.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Код, автоматически созданный конструктором компонентов
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||||
|
/// содержимое этого метода с помощью редактора кода.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
textBox1 = new TextBox();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// textBox1
|
||||||
|
//
|
||||||
|
textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
textBox1.Location = new Point(19, 25);
|
||||||
|
textBox1.Name = "textBox1";
|
||||||
|
textBox1.Size = new Size(154, 27);
|
||||||
|
textBox1.TabIndex = 0;
|
||||||
|
textBox1.TextChanged += textBox1_TextChanged;
|
||||||
|
//
|
||||||
|
// Input_text
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
Controls.Add(textBox1);
|
||||||
|
Name = "Input_text";
|
||||||
|
Size = new Size(192, 79);
|
||||||
|
ResumeLayout(false);
|
||||||
|
PerformLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private TextBox textBox1;
|
||||||
|
}
|
||||||
|
}
|
81
ViewComponents/Input_text.cs
Normal file
81
ViewComponents/Input_text.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using ViewComponents.Exeption;
|
||||||
|
|
||||||
|
namespace ViewComponents
|
||||||
|
{
|
||||||
|
public partial class Input_text : UserControl
|
||||||
|
{
|
||||||
|
public Input_text()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public event Action<string?> ItemChange;
|
||||||
|
private bool isMin = false;
|
||||||
|
private bool isMax = false;
|
||||||
|
|
||||||
|
public int? minlen;
|
||||||
|
public int? maxlen;
|
||||||
|
public string? Element
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!isMax || !isMin) throw new TextBoundsNotSetExeption("Диапазон не задан");
|
||||||
|
if(textBox1.Text.Length < minlen || textBox1.Text.Length > maxlen) throw new TextOutOfBoundsExeption("Слово не из диапазона");
|
||||||
|
return textBox1.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (isMin && isMax && value != null && value.Length >= minlen && value.Length <= maxlen) textBox1.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? MinLen
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (isMin == true) return minlen;
|
||||||
|
else return null;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.HasValue)
|
||||||
|
{
|
||||||
|
minlen = value;
|
||||||
|
isMin = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? MaxLen
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (isMax == true) return maxlen;
|
||||||
|
else return null;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.HasValue)
|
||||||
|
{
|
||||||
|
maxlen = value;
|
||||||
|
isMax = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void textBox1_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ItemChange?.Invoke(textBox1.Text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace Component_1
|
namespace ViewComponents
|
||||||
{
|
{
|
||||||
partial class List_with_choice
|
partial class List_with_choice
|
||||||
{
|
{
|
||||||
@ -29,58 +29,30 @@
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
checkedListBox1 = new CheckedListBox();
|
checkedListBox1 = new CheckedListBox();
|
||||||
button_Load = new Button();
|
|
||||||
button_Clean = new Button();
|
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
// checkedListBox1
|
// checkedListBox1
|
||||||
//
|
//
|
||||||
checkedListBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
checkedListBox1.Dock = DockStyle.Fill;
|
||||||
checkedListBox1.FormattingEnabled = true;
|
checkedListBox1.FormattingEnabled = true;
|
||||||
checkedListBox1.Location = new Point(85, 23);
|
checkedListBox1.Location = new Point(0, 0);
|
||||||
checkedListBox1.Name = "checkedListBox1";
|
checkedListBox1.Name = "checkedListBox1";
|
||||||
checkedListBox1.Size = new Size(201, 92);
|
checkedListBox1.Size = new Size(208, 150);
|
||||||
checkedListBox1.TabIndex = 0;
|
checkedListBox1.TabIndex = 0;
|
||||||
checkedListBox1.SelectedIndexChanged += checkedListBox1_SelectedIndexChanged;
|
checkedListBox1.SelectedIndexChanged += checkedListBox1_SelectedIndexChanged;
|
||||||
//
|
//
|
||||||
// button_Load
|
|
||||||
//
|
|
||||||
button_Load.Anchor = AnchorStyles.Bottom;
|
|
||||||
button_Load.Location = new Point(6, 146);
|
|
||||||
button_Load.Name = "button_Load";
|
|
||||||
button_Load.Size = new Size(161, 29);
|
|
||||||
button_Load.TabIndex = 1;
|
|
||||||
button_Load.Text = "Заполнить список";
|
|
||||||
button_Load.UseVisualStyleBackColor = true;
|
|
||||||
button_Load.Click += button_Load_Click;
|
|
||||||
//
|
|
||||||
// button_Clean
|
|
||||||
//
|
|
||||||
button_Clean.Anchor = AnchorStyles.Bottom;
|
|
||||||
button_Clean.Location = new Point(203, 146);
|
|
||||||
button_Clean.Name = "button_Clean";
|
|
||||||
button_Clean.Size = new Size(153, 29);
|
|
||||||
button_Clean.TabIndex = 2;
|
|
||||||
button_Clean.Text = "Очистить список";
|
|
||||||
button_Clean.UseVisualStyleBackColor = true;
|
|
||||||
button_Clean.Click += button_Clean_Click;
|
|
||||||
//
|
|
||||||
// List_with_choice
|
// List_with_choice
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(8F, 20F);
|
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
Controls.Add(button_Clean);
|
|
||||||
Controls.Add(button_Load);
|
|
||||||
Controls.Add(checkedListBox1);
|
Controls.Add(checkedListBox1);
|
||||||
Name = "List_with_choice";
|
Name = "List_with_choice";
|
||||||
Size = new Size(371, 198);
|
Size = new Size(208, 150);
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private CheckedListBox checkedListBox1;
|
private CheckedListBox checkedListBox1;
|
||||||
private Button button_Load;
|
|
||||||
private Button button_Clean;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
61
ViewComponents/List_with_choice.cs
Normal file
61
ViewComponents/List_with_choice.cs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace ViewComponents
|
||||||
|
{
|
||||||
|
public partial class List_with_choice : UserControl
|
||||||
|
{
|
||||||
|
public List_with_choice()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public event Action<string?> SelectedItemChange;
|
||||||
|
|
||||||
|
public string? Element
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (checkedListBox1.SelectedItem != null) return checkedListBox1.SelectedItem.ToString();
|
||||||
|
else return string.Empty;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null && checkedListBox1.Items.Contains(value)) checkedListBox1.SelectedItem = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Fill_List(string str) //метод заполнения списка
|
||||||
|
{
|
||||||
|
if (str == null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Вы не ввели строку");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string[] list = str.Split(' ');
|
||||||
|
foreach (string s in list)
|
||||||
|
{
|
||||||
|
checkedListBox1.Items.Add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void Clean_List() //метод очистки списка
|
||||||
|
{
|
||||||
|
checkedListBox1.Items.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
SelectedItemChange?.Invoke(checkedListBox1.SelectedItem.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
60
ViewComponents/List_with_choice.resx
Normal file
60
ViewComponents/List_with_choice.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
55
ViewComponents/MyTreeView.Designer.cs
generated
Normal file
55
ViewComponents/MyTreeView.Designer.cs
generated
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
namespace ViewComponents
|
||||||
|
{
|
||||||
|
partial class MyTreeView
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Обязательная переменная конструктора.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Освободить все используемые ресурсы.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Код, автоматически созданный конструктором компонентов
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||||
|
/// содержимое этого метода с помощью редактора кода.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
treeView = new TreeView();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// treeView
|
||||||
|
//
|
||||||
|
treeView.Location = new Point(13, 18);
|
||||||
|
treeView.Name = "treeView";
|
||||||
|
treeView.Size = new Size(176, 148);
|
||||||
|
treeView.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// MyTreeView
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(8F, 20F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
Controls.Add(treeView);
|
||||||
|
Name = "MyTreeView";
|
||||||
|
Size = new Size(204, 192);
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TreeView treeView;
|
||||||
|
}
|
||||||
|
}
|
88
ViewComponents/MyTreeView.cs
Normal file
88
ViewComponents/MyTreeView.cs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
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 ViewComponents
|
||||||
|
{
|
||||||
|
public partial class MyTreeView : UserControl
|
||||||
|
{
|
||||||
|
public MyTreeView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
private 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<T>()
|
||||||
|
{
|
||||||
|
if (treeView.SelectedNode == null || treeView.SelectedNode.Nodes.Count > 0) return default(T);
|
||||||
|
|
||||||
|
TreeNode? node = treeView.SelectedNode;
|
||||||
|
|
||||||
|
var type = typeof(T);
|
||||||
|
var fields = type.GetFields();
|
||||||
|
|
||||||
|
var item = Activator.CreateInstance(type);
|
||||||
|
|
||||||
|
while (node != null)
|
||||||
|
{
|
||||||
|
var field = fields.FirstOrDefault(x => x.Name == node.Name);
|
||||||
|
if (field != null)
|
||||||
|
{
|
||||||
|
field.SetValue(item, node.Text);
|
||||||
|
}
|
||||||
|
node = node.Parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item != null ? (T)item : default(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHierarchy(List<(string, bool)> fields)
|
||||||
|
{
|
||||||
|
hierarchy = fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addItem<T>(T item)
|
||||||
|
{
|
||||||
|
var type = typeof(T);
|
||||||
|
var fields = type.GetFields();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
60
ViewComponents/MyTreeView.resx
Normal file
60
ViewComponents/MyTreeView.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
@ -1,7 +1,6 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>net6.0-windows</TargetFramework>
|
<TargetFramework>net6.0-windows</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
@ -9,7 +8,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Component_1\Component_1.csproj" />
|
<Compile Update="Input_text.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
<CustomToolNamespace>TestView</CustomToolNamespace>
|
||||||
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue
Block a user