using ModuleTools.Extensions; using System; using System.Windows.Forms; namespace DesktopTools.BaseControls { public abstract partial class AbstractBaseControl : UserControl { /// /// Оригинальное значение (требуется при откате изменений) /// protected object _originalValue; /// /// Необходимость проверки при получении данных /// protected bool _mustCheckValue; /// /// Название свойства, по которму идет отображение /// protected string PropertyName { get; private set; } /// /// Событие изменения значения в контроле /// protected event Action OnValueChange; /// /// Событие изменения значения в контроле /// public event Action OnValueChangeEvent { add { OnValueChange += value; } remove { OnValueChange -= value; } } /// /// Вызов события в дочерних контролах /// protected void CallOnValueChangeEvent() => OnValueChange?.Invoke(); public AbstractBaseControl(string propertyName) { InitializeComponent(); PropertyName = propertyName; } #region Работа с заголовком /// /// Установка заголовка /// /// /// Ширину полученного загаловка public int SetTitle(string title) { labelTitle.Text = title; labelTitle.AutoSize = true; return labelTitle.Width; } /// /// Установка ширины заголовка (вызывается через событие, чтобы у всех заголовков получилась одна ширина) /// /// public void SetTitleWidth(int width) { labelTitle.AutoSize = false; labelTitle.Width = width; } #endregion /// /// Устанвока контрола в режим только просмотра /// /// public abstract void SetReadOnly(bool readOnly); /// /// Установка значения /// /// public virtual void SetValueToControl(object value) => _originalValue = value; /// /// Сброс значения /// public abstract void DropValue(); /// /// Установка флага необхоидмости проверки /// /// public void SetMustCheckValue(bool mustCheckValue) => _mustCheckValue = mustCheckValue; /// /// Проверка на заполненность /// /// public abstract bool CheckValue(); /// /// Получение значение с контрола /// /// protected abstract object GetValueFromControl(); /// /// Заполнение свойства объекта значением из контрола /// /// public void FillPropertyToObject(object obj) { if (obj != null && PropertyName.IsNotEmpty()) { var property = obj.GetType().GetProperty(PropertyName); if (property != null) { property.SetValue(obj, GetValueFromControl()); } } } } }