diff --git a/VolkovLabs/WinFormsLibraryVolkov/CustomInputRangeDate.cs b/VolkovLabs/WinFormsLibraryVolkov/CustomInputRangeDate.cs index fda2083..2bebbdb 100644 --- a/VolkovLabs/WinFormsLibraryVolkov/CustomInputRangeDate.cs +++ b/VolkovLabs/WinFormsLibraryVolkov/CustomInputRangeDate.cs @@ -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); } diff --git a/VolkovLabs/WinFormsLibraryVolkov/CustomTreeCell.cs b/VolkovLabs/WinFormsLibraryVolkov/CustomTreeCell.cs index 5ab9bfe..42a4695 100644 --- a/VolkovLabs/WinFormsLibraryVolkov/CustomTreeCell.cs +++ b/VolkovLabs/WinFormsLibraryVolkov/CustomTreeCell.cs @@ -34,15 +34,15 @@ namespace WinFormsLibraryVolkov } } - // Обновленный метод для добавления одного элемента в дерево + // Метод для добавления элемента в дерево public void AddCell(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() where T : class, new() - { - if (treeView.SelectedNode == null || Levels == null || treeView.SelectedNode.Nodes.Count > 0) - { - return null; - } + public T GetSelectedObject() 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 stack = new Stack(); - 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; + } + } }