Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework
- Название:Программирование мобильных устройств на платформе .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2006
- Город:Москва • Санкт-Петербург • Киев
- ISBN:5-8459-0989-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework краткое содержание
Книга известного профессионала в области компьютерных технологий посвящена разработке приложений для широкого спектра мобильных устройств с использованием популярной и постоянно развивающейся платформы .NET Compact Framework. Уникальность этой книги состоит в том, что в ней гармонично переплетены теоретические сведения обо всем цикле разработки программного обеспечения с практическими примерами применения на языках С# и Visual Basic. Подробно рассматриваются концепции, лежащие в основе самой платформы .NET Compact Framework, а также вопросы, связанные с созданием эффективного пользовательского интерфейса, управлением памятью, производительностью и надежностью. Немалое внимание уделяется практическим аспектам разработки приложений для мобильных устройств, среди которых выбор модели представления и доступа к данным, внедрение коммуникационной модели, реализация модели поведения с помощью конечных автоматов и использование XML.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Программирование мобильных устройств на платформе .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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);
} //Конец функции
} //Конец класса
//-----------------------------------------------------------------
//Переменная для хранения нашего нового элемента управления 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;
}
//----------------------------------------------------------------
//ОБРАБОТЧИК СОБЫТИЙ: Этот обработчик подключается динамически при
// создании элемента управления
//----------------------------------------------------------------
private void textBox_TextChanged(object sender, System.EventArgs e) {
if (m_filteredTextBox.IsFullValidInput == true) {
label1.Text = "FULL SOCIAL SECURITY NUMBER!!!";
} else {
label1.Text = "Not full input yet...";
Интервал:
Закладка: