98 lines
2.5 KiB
C#
98 lines
2.5 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|