Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Программирование мобильных устройств на платформе .NET Compact Framework"
Описание и краткое содержание "Программирование мобильных устройств на платформе .NET Compact Framework" читать бесплатно онлайн.
Книга известного профессионала в области компьютерных технологий посвящена разработке приложений для широкого спектра мобильных устройств с использованием популярной и постоянно развивающейся платформы .NET Compact Framework. Уникальность этой книги состоит в том, что в ней гармонично переплетены теоретические сведения обо всем цикле разработки программного обеспечения с практическими примерами применения на языках С# и Visual Basic. Подробно рассматриваются концепции, лежащие в основе самой платформы .NET Compact Framework, а также вопросы, связанные с созданием эффективного пользовательского интерфейса, управлением памятью, производительностью и надежностью. Немалое внимание уделяется практическим аспектам разработки приложений для мобильных устройств, среди которых выбор модели представления и доступа к данным, внедрение коммуникационной модели, реализация модели поведения с помощью конечных автоматов и использование XML.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
using System;
//----------------------------------------------------------------------
//Этот класс является элементом управления, производным от TextBox.
//Он наследует все графические свойства TextBox, но добавляет фильтрацию
//содержимого текстового окна, тем самым гарантируя,
//что вводимый текст будет соответствовать следующему формату:
//###-##-####.
//Этот формат соответствует формату номеров карточек социального
//страхования, которые используются в США.
//----------------------------------------------------------------------
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++;
}
}
}
//Если превышена длина строки, усечь ее
if (m_sb.Length > SSNumberLength) {
m_sb.Length = SSNumberLength;
}
//Возвратить новую строку
return m_sb.ToString();
}
bool m_in_OnChangeFunction;
protected override void OnTextChanged(EventArgs e) {
//------------------------------------------------------------------
//Если мы изменим свойство .Text, то будет осуществлен повторный
//вход в обработчик. В этом случае мы не хотим предпринимать никаких
//действий и должны просто выйти из функции без передачи события
//куда-то еще.
//------------------------------------------------------------------
if (m_in_OnChangeFunction == true) {
return;
}
//Заметьте, что сейчас мы находимся в функции OnChanged,
//поэтому мы можем обнаружить повторное вхождение (см. код выше)
m_in_OnChangeFunction = true;
//Получить текущее свойство .Text
string oldText = this.Text;
//Получить текущий индекс
SelectionStart int selectionStart = this.SelectionStart;
//Форматировать строку, чтобы она удовлетворяла нашим потребностям
string newText = formatText_NNN_NN_NNNN(oldText, ref selectionStart);
//Если текст отличается от исходного, обновить
//свойство .Text
if (System.String.Compare(oldText, newText) != 0) {
//Это приведет к повторному вхождению
this.Text = newText;
//Обновить местоположение точки вставки
this.SelectionStart = selectionStart;
}
//Мы принудительно обеспечили соответствие введенного текста
//правильному формату, поэтому, если длина строки согласуется с длиной
//номера карточки социального страхования, то мы знаем что она имеет
//формат ###-##-####.
if (this.Text.Length == SSNumberLength) {
//Да, мы имеем полный номер карточки социального страхования
m_inputIsFullValidEntry = true;
} else {
//Нет, мы пока не получили полный номер карточки социального страхования
m_inputIsFullValidEntry = false;
}
//Вызвать наш базовый класс и сообщить всем объектам, которых это
//может интересовать, что текст изменился
base.OnTextChanged(e);
//Заметьте, что сейчас мы покидаем наш код и хотим отключить
//проверку повторных вхождений в него.
m_in_OnChangeFunction = false;
}
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) {
//Поскольку нам известно, что никакие буквы при вводе нам не нужны,
//то просто игнорировать их, если они встречаются.
char keyPressed = e.KeyChar;
if (System.Char.IsLetter(keyPressed)) {
//Сообщить системе о том, что событие обработано
e.Handled =true;
return;
}
//Обработать нажатие клавиши обычным способом
base.OnKeyPress(e);
} //Конец функции
} //Конец класса
Листинг 13.4 Код формы для создания пользовательского элемента управления TextBox//-----------------------------------------------------------------
//Переменная для хранения нашего нового элемента управления TextBox
//-----------------------------------------------------------------
SocialSecurityTextBox m_filteredTextBox;
//--------------------------------------------------------------
//ОБРАБОТЧИК СОБЫТИЙ: Создать экземпляр нашего пользовательского
// элемента управления и поместить его в форму
//--------------------------------------------------------------
private void button1_Click(object sender, System.EventArgs e) {
//Создать, позиционировать и разместить элемент управления
m_filteredTextBox = new SocialSecurityTextBox();
m_filteredTextBox.Bounds = new System.Drawing.Rectangle(2, 2, 160, 20);
//Подключить обработчик событий
m_filteredTextBox.TextChanged += new EventHandler(this.textBox_TextChanged);
//Задать родительский объект
m_filteredTextBox.Parent =this;
//Выделить элемент управления
m_filteredTextBox.Focus();
//Сделать данную кнопку недоступной, чтобы поверх данного объекта
//не был создан второй объект
SocialSecurityTextBox button1.Enabled = false;
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Программирование мобильных устройств на платформе .NET Compact Framework"
Книги похожие на "Программирование мобильных устройств на платформе .NET Compact Framework" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework"
Отзывы читателей о книге "Программирование мобильных устройств на платформе .NET Compact Framework", комментарии и мнения людей о произведении.