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());
}
}
}
}
}