using Controls.Exceptions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace Controls { public partial class CustomTextBoxNumber : UserControl { /// /// Конструктор /// public CustomTextBoxNumber() { InitializeComponent(); } /// /// Шаблон вводимого значения /// private string? _numberPattern; /// /// Шаблон вводимого значения /// private string? _numberExample = "+79991144333"; /// /// Шаблон вводимого значения /// public string? NumPattern { get { return _numberPattern; } set { _numberPattern = value; } } /// /// Введенное значение /// public string? TextBoxNumber { get { if (NumPattern == null) { throw new CustomNumberException("Шаблон не заполнен!"); } Regex regex = new Regex(NumPattern); if (regex.IsMatch(textBoxNumber.Text)) { return textBoxNumber.Text; } else { throw new CustomNumberException(textBoxNumber.Text + " не соответствует шаблону!"); } } set { Regex regex = new Regex(NumPattern!); if (regex.IsMatch(value)) { textBoxNumber.Text = value; } else { throw new CustomNumberException(textBoxNumber.Text + " не соответствует шаблону!"); } } } /// /// Событие, вызываемое при смене значения /// private EventHandler _onValueChangedEvent; /// /// Событие, вызываемое при смене значения /// public event EventHandler ValueChanged { add { _onValueChangedEvent += value; } remove { _onValueChangedEvent -= value; } } /// /// Смена значения /// private void CustomNumberBox_NumberChanged(object sender, EventArgs e) { _onValueChangedEvent?.Invoke(sender, e); } /// /// Вывод подсказки с примером правильного ввода /// private void textBox_Enter(object sender, EventArgs e) { int visibleTime = 2000; ToolTip tooltip = new ToolTip(); tooltip.Show(_numberExample, textBoxNumber, 30, -20, visibleTime); } } }