using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; using System.Text.RegularExpressions; namespace ComponentsLibrary { public partial class Email : UserControl { private EventHandler? _changeEmail; private string emailPattern; public Email() { InitializeComponent(); } //Должна всплывать подсказка ToolTip с примером правильного ввода (пример должен заполняться через публичный метод). public void SetToolTip(string example) { toolTipEmail.SetToolTip(textBoxEmail, example); } private void showToolTip(object sender, EventArgs e) { toolTipEmail.Active = true; } //Публичное свойство для установки и получения введенного значения (set, get): public string EmailValue { get { if (string.IsNullOrEmpty(emailPattern)) { throw new EmailException("Шаблон электронной почты не задан."); } if (!IsValidEmail(textBoxEmail.Text)) { throw new EmailException("Введенный адрес электронной почты не соответствует шаблону."); } return textBoxEmail.Text; } set { if (IsValidEmail(value)) { textBoxEmail.Text = value; } else { textBoxEmail.Text = string.Empty; } } } //Шаблон, по которому будет проверяться вводимое значение, должен заполняться через публичное свойство public string EmailPattern { get { return emailPattern; } set { emailPattern = value; } } //правильный ввод должен заполняться через публичный метод private bool IsValidEmail(string email) { if (string.IsNullOrEmpty(emailPattern)) { return true; // Если шаблон не задан, любая строка считается валидной. } return Regex.IsMatch(email, emailPattern); } //событие, вызываемое при смене значения public event EventHandler ChangeEmail { add { _changeEmail += value; } remove { _changeEmail -= value; } } private void textBoxEmail_TextChanged(object sender, EventArgs e) { _changeEmail?.Invoke(this, e); } public TextBox EmailTextBox { get { return textBoxEmail; } } } }