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

View File

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