| Код | using System; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Windows.Forms;
namespace J { public class TextBoxCharacters : TextBox { public TextBoxCharacters() { AllowProperty = new AllowCharactersticGroup(); }
[DisplayName("Allowed Characters"), Description("шаблон с символами, разрешенными для ввода")] public AllowCharactersticGroup AllowProperty { get; set; }
protected override void OnKeyPress(KeyPressEventArgs e) { if (e.KeyChar == (int)Keys.Back || e.KeyChar == (int)Keys.Enter) return;
if ((ModifierKeys & Keys.CapsLock) == Keys.CapsLock) return; if ((ModifierKeys & Keys.Control) == Keys.Control) return;
if (AllowProperty.All) return;
if (AllowProperty.Custom) { if (String.IsNullOrEmpty(AllowProperty.AllowedCharacters)) return;
if (!AllowProperty.AllowedCharacters.Contains(e.KeyChar)) e.Handled = true; return; }
if (AllowProperty.Chars && Char.IsLetter(e.KeyChar)) return; if (AllowProperty.Digits && Char.IsDigit(e.KeyChar)) return; if(AllowProperty.Hyphen && e.KeyChar=='-') return;
if(AllowProperty.Punctuation && (e.KeyChar=='.' || e.KeyChar==',')) return;
if (AllowProperty.WhiteSpace && Char.IsWhiteSpace(e.KeyChar)) return; if (AllowProperty.Symbols && AllowCharactersticGroup.AllowedSymbols.Contains(e.KeyChar)) return;
e.Handled = true; } }
[TypeConverter(typeof(ExpandableObjectConverter))] public class AllowCharactersticGroup { #region Fields
private bool _chars; private bool _hyphen; private bool _digits; private bool _whiteSpace; private bool _symbols; private bool _punctuation; private string _allowedCharacters;
#endregion
#region Properties
[DisplayName("Буквы")] [TypeConverter(typeof(BooleanTypeConverter))] public Boolean Chars { get { if (Custom) return false; return _chars; } set { _chars = value; } }
[DisplayName("Дефис")] [TypeConverter(typeof(BooleanTypeConverter))] public Boolean Hyphen { get { if (Custom) return false; return _hyphen; } set { _hyphen = value; } }
[DisplayName("Цифры")] [TypeConverter(typeof(BooleanTypeConverter))] public Boolean Digits { get { if (Custom) return false; return _digits; } set { _digits = value; } }
[DisplayName("Пробел")] [TypeConverter(typeof(BooleanTypeConverter))] public Boolean WhiteSpace { get { if (Custom) return false; return _whiteSpace; } set { _whiteSpace = value; } }
[DisplayName("Символы")] [TypeConverter(typeof(BooleanTypeConverter))] [Description("/\\*-+)([]{}'\":;|/~!@#$%^&№?<>=_`")] public Boolean Symbols { get { if (Custom) return false; return _symbols; } set { _symbols = value; } }
[DisplayName("Знаки препинания")] [TypeConverter(typeof(BooleanTypeConverter))] public Boolean Punctuation { get { if (Custom) return false; return _punctuation; } set { _punctuation = value; } }
[DisplayName("Пользовательский"), TypeConverter(typeof(BooleanTypeConverter))] [Description("Пользователь сам указывает разрешенный набор символов")] public bool Custom { get; set; }
[DisplayName("Allowed characters")] [Description("символы разрешенные для ввода, если AllowePattern=All")] public String AllowedCharacters { get { if (!Custom) return String.Empty; return _allowedCharacters; } set { _allowedCharacters = value; } }
[Browsable(false)] public Boolean All { get { return Chars && Hyphen && Digits && Symbols && Punctuation; } private set { Chars = Hyphen = Digits = Symbols = Punctuation = WhiteSpace = value; Custom = !value; } }
public const String AllowedSymbols = "/\\*-+)([]{}'\":;|/~!@#$%^&№?<>=_`";
#endregion
#region .ctor
public AllowCharactersticGroup() { All = true; }
#endregion
#region Methods
public override string ToString() { if (Custom) return "Пользовательский"; if (Chars && Hyphen && WhiteSpace && Symbols && Punctuation) return "Все";
StringBuilder sb = new StringBuilder();
if (Chars) sb.Append("буквы,"); if (Hyphen) sb.Append("дефис,"); if (Digits) sb.Append("цифры,"); if (WhiteSpace) sb.Append("пробел,"); if (Symbols) sb.Append("символы,"); if (Punctuation) sb.Append("знаки препинания,"); if (sb.Length > 0 && sb[sb.Length - 1] == ',') sb.Remove(sb.Length - 1, 1); else if (sb.Length == 0) return "Только для чтения"; return sb.ToString(); }
#endregion }
public class BooleanTypeConverter : BooleanConverter { public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destType) { return (bool)value ? "Да" : "Нет"; }
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { return (string)value == "Есть"; } } }
|
|