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

137 lines
4.2 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 DesktopTools.Interfaces;
using ToolsModule.Extensions;
using System;
using System.Windows.Forms;
namespace DesktopTools.BaseControls
{
/// <summary>
/// Описание контрола для работы со значением свойства класса
/// </summary>
public partial class AbstractBaseControl : UserControl
{
/// <summary>
/// Фнукции для основного контрола
/// </summary>
protected IBaseControl _baseControl;
/// <summary>
/// Оригинальное значение (требуется при откате изменений)
/// </summary>
protected object _originalValue;
/// <summary>
/// Необходимость проверки при получении данных
/// </summary>
protected bool _mustFilling;
/// <summary>
/// Название свойства, по которму идет отображение
/// </summary>
protected string _propertyName;
#region Событие изменения значения
/// <summary>
/// Событие изменения значения в контроле
/// </summary>
private event Action OnValueChange;
/// <summary>
/// Событие изменения значения в контроле
/// </summary>
public event Action OnValueChangeEvent { add { OnValueChange += value; } remove { OnValueChange -= value; } }
/// <summary>
/// Вызов события в дочерних контролах
/// </summary>
protected void CallOnValueChangeEvent() => OnValueChange?.Invoke();
#endregion
/// <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}";
_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
#region Работа со значением
/// <summary>
/// Извлечение значения из свойства объекта
/// </summary>
/// <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);
}
}
}
/// <summary>
/// Сброс значения
/// </summary>
public void DropValue() => _baseControl?.DropValueForControl();
/// <summary>
/// Проверка на заполненность
/// </summary>
/// <returns></returns>
public bool CheckValue() => _baseControl?.CheckValueForControl() ?? false;
/// <summary>
/// Заполнение свойства объекта значением из контрола
/// </summary>
/// <param name="obj"></param>
public void GetValue(object obj)
{
if (obj != null && _propertyName.IsNotEmpty())
{
var property = obj.GetType().GetProperty(_propertyName);
if (property != null)
{
property.SetValue(obj, _baseControl?.GetValueFromControl());
}
}
}
#endregion
}
}