Литмир - Электронная Библиотека
Содержание  
A
A

//содержимого текстового окна, тем самым гарантируя,

//что вводимый текст будет соответствовать следующему формату:

//###-##-####.

//Этот формат соответствует формату номеров карточек социального

//страхования, которые используются в США.

//----------------------------------------------------------------------

public class  SocialSecurityTextBox: System.Windows.Forms.TextBox {

 private bool  m_inputIsFullValidEntry;

 //------------------------------------

 //Указывает, получен ли номер карточки

 //социального страхования полностью

 //------------------------------------

 public bool  IsFullValidInput {

  get {return m_inputIsFullValidEntry;}

 }

 //Объект StringBuilder, который мы будем часто использовать

 System.Text.StringBuilder m_sb;

 //Максимальная длина обрабатываемых строк

 const int  SSNumberLength = 11;

 //-----------

 //Конструктор

 //-----------

 public  SocialSecurityTextBox() {

  //Распределить память для нашего объекта StringBuilder и предоставить

  //место для нескольких дополнительных рабочих символов по умолчанию

  m_sb = new System.Text.StringBuilder(SSNumberLength + 5);

  m_inputIsFullValidEntry = false;

 }

 //---------------------------------------------------------------------

 //Форматировать поступающий текст с целью установления его соответствия

 //нужному формату:

 //

 // Формат номера карточки социального страхования : ###-##-####

 // символы: 01234567890

 //

 // [in] inString : Текст, который мы хотим форматировать

 // [in/out] selectionStart: Текущая точка вставки в тексте;

 // она будет смещаться в связи с удалением

 // и добавлением нами символов

 //----------------------------------------------------------------------

 private string formatText_NNN_NN_NNNN(string inString, ref int selectionStart) {

  const int  firstDashIndex = 3;

  const int secondDashIndex = 6;

  //Удалить старые данные и поместить входную строку

  //в объект StringBuilder, чтобы мы могли с ней работать.

  m_sb.Length = 0;

  m_sb.Append(inString);

  //------------------------------------------------------------

  //Просмотреть каждыйсимвол в строке, пока не будет

  //достигнута максимальная длина нашего форматированного текста

  //------------------------------------------------------------

  int  currentCharIndex;

  currentCharIndex = 0;

  while ((currentCharIndex < m_sb.Length) && (currentCharIndex < SSNumberLength)) {

   char  currentChar;

   currentChar = m_sb[currentCharIndex];

   if ((currentCharIndex == firstDashIndex) || (currentCharIndex == secondDashIndex))

   //-------------------------------

   //Данным символом должен быть "-"

   //-------------------------------

   {

    if (currentChar != '-') {

     //Вставить дефис

     m_sb.Insert(currentCharIndex, "-");

     //Если мы добавили символ перед точкой вставки,

     //она должна быть смещена вперед

     if (currentCharIndex <= selectionStart) {

      selectionStart++;

     }

    }

    //Этот символ годится, перейти к следующему символу

    currentCharIndex++;

   } else

   //-------------------------

   //Символ должен быть цифрой

   //-------------------------

   {

    if (System.Char.IsDigit(currentChar) == false) {

     //Удалить символ

     m_sb.Remove(currentCharIndex, 1);

     //Если мы добавили символ перед точкой вставки,

     //она должна быть смещена назад

     if (currentCharIndex < selectionStart) {

      selectionStart--;

     }

     //He увеличивать значение счетчика символов, ибо мы должны

     //просмотреть символ, занявший место того символа,

     //который мы удалили

    } else {

     //Символ является цифрой, все нормально.

     currentCharIndex++;

    }

151
{"b":"947732","o":1}