DepartmentProject/DepartmentPortal/Common/ToolsDesktop/BaseControls/AbstractBaseControl.cs

137 lines
4.2 KiB
C#
Raw Normal View History

2022-03-18 22:48:14 +04:00
using ToolsDesktop.Interfaces;
using ToolsModule.Extensions;
using System;
using System.Windows.Forms;
2022-03-18 22:48:14 +04:00
namespace ToolsDesktop.BaseControls
{
2021-03-30 22:34:31 +04:00
/// <summary>
/// Описание контрола для работы со значением свойства класса
/// </summary>
public partial class AbstractBaseControl : UserControl
{
/// <summary>
/// Фнукции для основного контрола
/// </summary>
protected IBaseControl _baseControl;
/// <summary>
/// Оригинальное значение (требуется при откате изменений)
/// </summary>
protected object _originalValue;
/// <summary>
/// Необходимость проверки при получении данных
/// </summary>
2021-03-30 22:34:31 +04:00
protected bool _mustFilling;
/// <summary>
/// Название свойства, по которму идет отображение
/// </summary>
2021-03-30 22:34:31 +04:00
protected string _propertyName;
2021-03-30 22:34:31 +04:00
#region Событие изменения значения
/// <summary>
/// Событие изменения значения в контроле
/// </summary>
2021-03-30 22:34:31 +04:00
private event Action OnValueChange;
/// <summary>
/// Событие изменения значения в контроле
/// </summary>
public event Action OnValueChangeEvent { add { OnValueChange += value; } remove { OnValueChange -= value; } }
/// <summary>
/// Вызов события в дочерних контролах
/// </summary>
protected void CallOnValueChangeEvent() => OnValueChange?.Invoke();
2021-03-30 22:34:31 +04:00
#endregion
2021-03-30 22:34:31 +04:00
/// <summary>
/// Конструктор
/// </summary>
/// <param name="propertyName">Название свойства</param
/// <param name="mustFilling">Должно ли оно быть заполненным обязательно</param>
/// <param name="readOnly">Устанвока контрола в режим только просмотра</param>
public AbstractBaseControl(string propertyName, bool mustFilling, bool readOnly)
{
InitializeComponent();
Name = $"Control{propertyName}";
2021-03-30 22:34:31 +04:00
_propertyName = propertyName;
_mustFilling = mustFilling;
panelControl.Enabled = !readOnly;
_baseControl?.SetDefaultValue();
}
#region Работа с заголовком
/// <summary>
/// Установка заголовка
/// </summary>
/// <param name="title"></param>
/// <returns>Ширину полученного загаловка</returns>
public int SetTitle(string title)
{
labelTitle.Text = title;
labelTitle.AutoSize = true;
return labelTitle.Width;
}
/// <summary>
/// Установка ширины заголовка (вызывается через событие, чтобы у всех заголовков получилась одна ширина)
/// </summary>
/// <param name="width"></param>
public void SetTitleWidth(int width)
{
labelTitle.AutoSize = false;
labelTitle.Width = width;
}
#endregion
2021-03-30 22:34:31 +04:00
#region Работа со значением
/// <summary>
2021-03-30 22:34:31 +04:00
/// Извлечение значения из свойства объекта
/// </summary>
2021-03-30 22:34:31 +04:00
/// <param name="obj"></param>
public void SetValue(object obj)
{
if (obj != null && _propertyName.IsNotEmpty())
{
var property = obj.GetType().GetProperty(_propertyName);
if (property != null)
{
_originalValue = property.GetValue(obj);
_baseControl?.SetValueToControl(_originalValue);
2021-03-30 22:34:31 +04:00
}
}
}
/// <summary>
/// Сброс значения
/// </summary>
public void DropValue() => _baseControl?.DropValueForControl();
/// <summary>
/// Проверка на заполненность
/// </summary>
/// <returns></returns>
public bool CheckValue() => _baseControl?.CheckValueForControl() ?? false;
/// <summary>
/// Заполнение свойства объекта значением из контрола
/// </summary>
/// <param name="obj"></param>
2021-03-30 22:34:31 +04:00
public void GetValue(object obj)
{
2021-03-30 22:34:31 +04:00
if (obj != null && _propertyName.IsNotEmpty())
{
2021-03-30 22:34:31 +04:00
var property = obj.GetType().GetProperty(_propertyName);
if (property != null)
{
property.SetValue(obj, _baseControl?.GetValueFromControl());
}
}
}
2021-03-30 22:34:31 +04:00
#endregion
}
}