Шрифт:
//место для нескольких дополнительных рабочих символов по умолчанию
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++;
}
}
}
//Если превышена длина строки, усечь ее
if (m_sb.Length > SSNumberLength) {
m_sb.Length = SSNumberLength;
}
//Возвратить новую строку
return m_sb.ToString;