using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System; using System.Windows.Forms; using FormLibrary.Exceptions; namespace FormLibrary { public partial class IntegerInputControl : UserControl { // Событие, вызываемое при изменении значения в TextBox public event EventHandler? ValueChanged; // Событие, вызываемое при изменении состояния CheckBox public event EventHandler? CheckBoxChanged; public IntegerInputControl() { InitializeComponent(); checkBoxNull.CheckedChanged += CheckBoxNull_CheckedChanged; textBoxInput.TextChanged += TextBoxInput_TextChanged; } // Публичное свойство для установки и получения введенного значения public int? Value { get { if (checkBoxNull.Checked) { return null; } else { if (string.IsNullOrWhiteSpace(textBoxInput.Text)) { throw new EmptyValueException(); } if (int.TryParse(textBoxInput.Text, out int result)) { return result; } else { throw new InvalidValueTypeException(); } } } set { if (value == null) { checkBoxNull.Checked = true; textBoxInput.Enabled = false; textBoxInput.Text = string.Empty; } else { checkBoxNull.Checked = false; textBoxInput.Enabled = true; textBoxInput.Text = value.ToString(); } } } // Метод обработки изменения состояния CheckBox private void CheckBoxNull_CheckedChanged(object sender, EventArgs e) { textBoxInput.Enabled = !checkBoxNull.Checked; if (checkBoxNull.Checked) { textBoxInput.Text = string.Empty; } // Вызываем событие при изменении состояния CheckBox CheckBoxChanged?.Invoke(this, EventArgs.Empty); } // Метод обработки изменения текста в текстовом поле private void TextBoxInput_TextChanged(object sender, EventArgs e) { // Вызываем событие при изменении текста ValueChanged?.Invoke(this, EventArgs.Empty); } } }