using System; using System.Windows.Forms; namespace DesktopTools.BaseControls { /// /// Контрол, предоставляющий работу с вещественным полем /// public partial class BaseControlDecimal : AbstractBaseControl { /// /// Конструктор /// /// /// /// /// /// /// public BaseControlDecimal(string propertyName, bool mustFilling, bool readOnly, decimal? minValue, decimal? maxValue, int? decimalPlaces) : base(propertyName, mustFilling, readOnly) { InitializeComponent(); if (!_mustFilling) { checkBoxNullable.CheckedChanged += (object sender, EventArgs e) => { numericUpDown.Enabled = !(sender as CheckBox).Checked; CallOnValueChangeEvent(); }; panelControl.Controls.Add(checkBoxNullable); } numericUpDown.ValueChanged += (object sender, EventArgs e) => { CallOnValueChangeEvent(); }; if (minValue.HasValue) { numericUpDown.Minimum = minValue.Value; } if (maxValue.HasValue) { numericUpDown.Maximum = maxValue.Value; } if (decimalPlaces.HasValue) { numericUpDown.DecimalPlaces = decimalPlaces.Value; } panelControl.Controls.Add(numericUpDown); } protected override void SetDefaultValue() => _originalValue = _mustFilling ? 0 : null; protected override void SetValueToControl(object value) { if (value != null) { numericUpDown.Value = Convert.ToDecimal(value); } else if (!_mustFilling) { checkBoxNullable.Checked = true; } } public override void DropValue() { if (_originalValue != null) { numericUpDown.Value = Convert.ToDecimal(_originalValue); } else if (!_mustFilling) { checkBoxNullable.Checked = true; } } public override bool CheckValue() => true; protected override object GetValueFromControl() => !_mustFilling && checkBoxNullable.Checked ? null : Convert.ToDouble(numericUpDown.Value); } }