PIbd-31_Malafeev.L.S._COP_25/Cop_25/Controls/CustomTextBoxNumber.cs

120 lines
3.4 KiB
C#
Raw Normal View History

2024-09-05 21:45:49 +04:00
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
{
2024-09-05 23:08:08 +04:00
public partial class CustomTextBoxNumber : UserControl
2024-09-05 21:45:49 +04:00
{
/// <summary>
/// Конструктор
/// </summary>
2024-09-05 23:08:08 +04:00
public CustomTextBoxNumber()
2024-09-05 21:45:49 +04:00
{
InitializeComponent();
}
/// <summary>
/// Шаблон вводимого значения
/// </summary>
2024-09-05 23:08:08 +04:00
private string? _numberPattern;
/// <summary>
/// Шаблон вводимого значения
/// </summary>
2024-09-06 00:43:56 +04:00
private string? _numberExample = "+79991144333";
/// <summary>
/// Шаблон вводимого значения
/// </summary>
public string? NumPattern
2024-09-05 23:08:08 +04:00
{
get { return _numberPattern; }
set { _numberPattern = value; }
}
2024-09-05 21:45:49 +04:00
/// <summary>
/// Введенное значение
/// </summary>
2024-09-05 21:53:15 +04:00
public string? TextBoxNumber
2024-09-05 21:45:49 +04:00
{
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 + " не соответствует шаблону!");
}
}
}
/// <summary>
/// Событие, вызываемое при смене значения
/// </summary>
private EventHandler _onValueChangedEvent;
/// <summary>
/// Событие, вызываемое при смене значения
/// </summary>
public event EventHandler ValueChanged
{
add
{
_onValueChangedEvent += value;
}
remove
{
_onValueChangedEvent -= value;
}
}
/// <summary>
/// Смена значения
/// </summary>
2024-09-05 21:53:15 +04:00
private void CustomNumberBox_NumberChanged(object sender, EventArgs e)
2024-09-05 21:45:49 +04:00
{
_onValueChangedEvent?.Invoke(sender, e);
}
2024-09-06 00:43:56 +04:00
/// <summary>
/// Вывод подсказки с примером правильного ввода
/// </summary>
private void textBox_Enter(object sender, EventArgs e)
{
int visibleTime = 2000;
ToolTip tooltip = new ToolTip();
tooltip.Show(_numberExample, textBoxNumber, 30, -20, visibleTime);
}
2024-09-05 21:45:49 +04:00
}
}