122 lines
3.5 KiB
C#
122 lines
3.5 KiB
C#
|
using ModuleTools.Extensions;
|
|||
|
using System;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace DesktopTools.BaseControls
|
|||
|
{
|
|||
|
public abstract partial class AbstractBaseControl : UserControl
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Оригинальное значение (требуется при откате изменений)
|
|||
|
/// </summary>
|
|||
|
protected object _originalValue;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Необходимость проверки при получении данных
|
|||
|
/// </summary>
|
|||
|
protected bool _mustCheckValue;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Название свойства, по которму идет отображение
|
|||
|
/// </summary>
|
|||
|
protected string PropertyName { get; private set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Событие изменения значения в контроле
|
|||
|
/// </summary>
|
|||
|
protected event Action OnValueChange;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Событие изменения значения в контроле
|
|||
|
/// </summary>
|
|||
|
public event Action OnValueChangeEvent { add { OnValueChange += value; } remove { OnValueChange -= value; } }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Вызов события в дочерних контролах
|
|||
|
/// </summary>
|
|||
|
protected void CallOnValueChangeEvent() => OnValueChange?.Invoke();
|
|||
|
|
|||
|
|
|||
|
public AbstractBaseControl(string propertyName)
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
PropertyName = propertyName;
|
|||
|
}
|
|||
|
|
|||
|
#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
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Устанвока контрола в режим только просмотра
|
|||
|
/// </summary>
|
|||
|
/// <param name="readOnly"></param>
|
|||
|
public abstract void SetReadOnly(bool readOnly);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Установка значения
|
|||
|
/// </summary>
|
|||
|
/// <param name="value"></param>
|
|||
|
public virtual void SetValueToControl(object value) => _originalValue = value;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Сброс значения
|
|||
|
/// </summary>
|
|||
|
public abstract void DropValue();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Установка флага необхоидмости проверки
|
|||
|
/// </summary>
|
|||
|
/// <param name="mustCheckValue"></param>
|
|||
|
public void SetMustCheckValue(bool mustCheckValue) => _mustCheckValue = mustCheckValue;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Проверка на заполненность
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public abstract bool CheckValue();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Получение значение с контрола
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
protected abstract object GetValueFromControl();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Заполнение свойства объекта значением из контрола
|
|||
|
/// </summary>
|
|||
|
/// <param name="obj"></param>
|
|||
|
public void FillPropertyToObject(object obj)
|
|||
|
{
|
|||
|
if (obj != null && PropertyName.IsNotEmpty())
|
|||
|
{
|
|||
|
var property = obj.GetType().GetProperty(PropertyName);
|
|||
|
if (property != null)
|
|||
|
{
|
|||
|
property.SetValue(obj, GetValueFromControl());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|