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;
|
||
}
|
||
}
|
||
}
|
||
}
|