lab 1 done

This commit is contained in:
Никита Волков 2024-09-19 23:40:13 +04:00
parent cca38e76c1
commit 66702ee864
2 changed files with 40 additions and 46 deletions

View File

@ -19,8 +19,8 @@ namespace WinFormsLibraryVolkov
private string example;
// 2 публичных поля для настройки границ диапазона
public DateTime? MinDate { get; set; }
public DateTime? MaxDate { get; set; }
public DateTime MinDate { get; set; }
public DateTime MaxDate { get; set; }
public CustomInputRangeDate()
{
@ -31,26 +31,24 @@ namespace WinFormsLibraryVolkov
public string Error { get; protected set; } = string.Empty;
//Публичное свойство для установки и получения введенного значения(set, get).
///При получении проводиться проверка,
//При получении проводиться проверка,
//если введенное значение не входит в диапазон, возвращать
//значение null, а в отдельное поле выводить текст ошибки.При
//установке должна проводиться проверка, если передаваемое
//значение не входит в диапазон, то не заполнять поле компонента.
public DateTime? Date
public DateTime Date
{
get
{
if (MinDate == null || MaxDate == null)
{
Error = "Диапазон не задан";
return null;
throw new ArgumentException("Диапазон не задан");
}
if (dateTimePicker.Value >= MinDate && dateTimePicker.Value <= MaxDate)
{
return dateTimePicker.Value;
}
Error = "Введенная дата лежит вне диапазона " + MinDate?.ToShortDateString() + " - " + MaxDate?.ToShortDateString();
return null;
throw new ArgumentException($"Введенная дана лежит вне диапазона {MinDate.ToShortDateString()} - {MaxDate.ToShortDateString()}");
}
set
{
@ -58,9 +56,9 @@ namespace WinFormsLibraryVolkov
{
Error = "Диапазон не задан";
}
if (value.HasValue && value >= MinDate && value <= MaxDate)
if (value >= MinDate && value <= MaxDate)
{
dateTimePicker.Value = value.Value;
dateTimePicker.Value = value;
}
}
}
@ -68,7 +66,7 @@ namespace WinFormsLibraryVolkov
private void dateTimePicker_Enter(object sender, EventArgs e)
{
ToolTip tt = new ToolTip();
example = "Введите дату от " + MinDate?.ToShortDateString() + " до " + MaxDate?.ToShortDateString();
example = "Введите дату от " + MinDate.ToShortDateString() + " до " + MaxDate.ToShortDateString();
tt.Show(example, dateTimePicker, 30, -20, 1000);
}

View File

@ -34,15 +34,15 @@ namespace WinFormsLibraryVolkov
}
}
// Обновленный метод для добавления одного элемента в дерево
// Метод для добавления элемента в дерево
public void AddCell<T>(int columnIndex, T element)
{
if (Levels == null || element == null || columnIndex < 0 || columnIndex >= Levels.NodeNames.Count)
{
return;
}
if (Levels == null) throw new ArgumentException("Levels равен null");
if (element == null) throw new ArgumentException("element равен null");
if (columnIndex < 0) throw new ArgumentException("индекс колонки < 0");
if (columnIndex >= Levels.NodeNames.Count) throw new ArgumentException("Индекс колонки > чем общее кол-во");
TreeNodeCollection treeNodeCollection = treeView.Nodes;
TreeNodeCollection treeNodeCollection = treeView.Nodes;
int num = 0;
foreach (string nodeName in Levels.NodeNames)
{
@ -72,34 +72,30 @@ namespace WinFormsLibraryVolkov
}
}
public T GetSelectedObject<T>() where T : class, new()
{
if (treeView.SelectedNode == null || Levels == null || treeView.SelectedNode.Nodes.Count > 0)
{
return null;
}
public T GetSelectedObject<T>() where T : class, new()
{
if (treeView.SelectedNode == null) throw new ArgumentException("treeView.SelectedNode == null");
if (Levels == null) throw new ArgumentException("Levels равен null");
if (treeView.SelectedNode.Nodes.Count > 0) throw new ArgumentException("treeView.SelectedNode.Nodes.Count > 0");
Stack<string> stack = new Stack<string>();
for (TreeNode treeNode = treeView.SelectedNode; treeNode != null; treeNode = treeNode.Parent)
{
stack.Push(treeNode.Text);
}
if (stack.Count != Levels.NodeNames.Count)
{
return null;
}
T val = new T();
foreach (string nodeName in Levels.NodeNames)
{
PropertyInfo property = val.GetType().GetProperty(nodeName);
string value = stack.Pop();
property?.SetValue(val, Convert.ChangeType(value, property?.PropertyType));
}
return val;
}
}
T val = new T();
TreeNode treeNode = treeView.SelectedNode;
int i = Levels.NodeNames.ToArray().Length - 1; // Получаем массив из очереди
while (treeNode != null && i >= 0)
{
PropertyInfo property = val.GetType().GetProperty(Levels.NodeNames.ToArray()[i]); // Обращаемся к массиву
if (property != null)
{
property.SetValue(val, Convert.ChangeType(treeNode.Text, property.PropertyType));
}
treeNode = treeNode.Parent;
i--;
}
if (i >= 0)
{
return null; // Не все свойства объекта установлены
}
return val;
}
}
}