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

122 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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