2021-04-01 21:30:29 +04:00
|
|
|
|
using DesktopTools.Interfaces;
|
|
|
|
|
using ModuleTools.Extensions;
|
2021-03-29 23:16:11 +04:00
|
|
|
|
using System;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace DesktopTools.BaseControls
|
|
|
|
|
{
|
2021-03-30 22:34:31 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Описание контрола для работы со значением свойства класса
|
|
|
|
|
/// </summary>
|
2021-04-01 21:30:29 +04:00
|
|
|
|
public partial class AbstractBaseControl : UserControl
|
2021-03-29 23:16:11 +04:00
|
|
|
|
{
|
2021-04-01 21:30:29 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Фнукции для основного контрола
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected IBaseControl _baseControl;
|
|
|
|
|
|
2021-03-29 23:16:11 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Оригинальное значение (требуется при откате изменений)
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected object _originalValue;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Необходимость проверки при получении данных
|
|
|
|
|
/// </summary>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
protected bool _mustFilling;
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Название свойства, по которму идет отображение
|
|
|
|
|
/// </summary>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
protected string _propertyName;
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
2021-03-30 22:34:31 +04:00
|
|
|
|
#region Событие изменения значения
|
2021-03-29 23:16:11 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Событие изменения значения в контроле
|
|
|
|
|
/// </summary>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
private event Action OnValueChange;
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Событие изменения значения в контроле
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event Action OnValueChangeEvent { add { OnValueChange += value; } remove { OnValueChange -= value; } }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Вызов события в дочерних контролах
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected void CallOnValueChangeEvent() => OnValueChange?.Invoke();
|
2021-03-30 22:34:31 +04:00
|
|
|
|
#endregion
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
2021-03-30 22:34:31 +04:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Конструктор
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="propertyName">Название свойства</param
|
|
|
|
|
/// <param name="mustFilling">Должно ли оно быть заполненным обязательно</param>
|
|
|
|
|
/// <param name="readOnly">Устанвока контрола в режим только просмотра</param>
|
|
|
|
|
public AbstractBaseControl(string propertyName, bool mustFilling, bool readOnly)
|
2021-03-29 23:16:11 +04:00
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2021-03-30 22:34:31 +04:00
|
|
|
|
_propertyName = propertyName;
|
|
|
|
|
_mustFilling = mustFilling;
|
|
|
|
|
panelControl.Enabled = !readOnly;
|
2021-04-01 21:30:29 +04:00
|
|
|
|
_baseControl?.SetDefaultValue();
|
2021-03-29 23:16:11 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
|
2021-03-30 22:34:31 +04:00
|
|
|
|
#region Работа со значением
|
2021-03-29 23:16:11 +04:00
|
|
|
|
/// <summary>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
/// Извлечение значения из свойства объекта
|
2021-03-29 23:16:11 +04:00
|
|
|
|
/// </summary>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
/// <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);
|
2021-04-01 21:30:29 +04:00
|
|
|
|
_baseControl?.SetValueToControl(_originalValue);
|
2021-03-30 22:34:31 +04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Сброс значения
|
|
|
|
|
/// </summary>
|
2021-04-01 21:30:29 +04:00
|
|
|
|
public void DropValue() => _baseControl?.DropValueForControl();
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Проверка на заполненность
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2021-04-01 21:30:29 +04:00
|
|
|
|
public bool CheckValue() => _baseControl?.CheckValueForControl() ?? false;
|
2021-03-29 23:16:11 +04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Заполнение свойства объекта значением из контрола
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="obj"></param>
|
2021-03-30 22:34:31 +04:00
|
|
|
|
public void GetValue(object obj)
|
2021-03-29 23:16:11 +04:00
|
|
|
|
{
|
2021-03-30 22:34:31 +04:00
|
|
|
|
if (obj != null && _propertyName.IsNotEmpty())
|
2021-03-29 23:16:11 +04:00
|
|
|
|
{
|
2021-03-30 22:34:31 +04:00
|
|
|
|
var property = obj.GetType().GetProperty(_propertyName);
|
2021-03-29 23:16:11 +04:00
|
|
|
|
if (property != null)
|
|
|
|
|
{
|
2021-04-01 21:30:29 +04:00
|
|
|
|
property.SetValue(obj, _baseControl?.GetValueFromControl());
|
2021-03-29 23:16:11 +04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-03-30 22:34:31 +04:00
|
|
|
|
#endregion
|
2021-03-29 23:16:11 +04:00
|
|
|
|
}
|
|
|
|
|
}
|