Иво Салмре - Программирование мобильных устройств на платформе .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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
5. Дважды щелкните на элементе управления RadioButton1 в окне конструктора форм. В результате этого будет создан и подключен к переключателю приведенный ниже обработчик событий radioButton1_Click. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие.
6. Измените имя второй кнопки с button2 на buttonShowEventLog и дважды щелкните на кнопке Button в окне конструктора форм. В результате этого будет создан и подключен к кнопке приведенный ниже обработчик событий buttonShowEventLog_Click. Введите соответствующий код из листинга 11.4, который будет реагировать на это событие
7. Введите оставшуюся часть приведенного ниже кода, включая операторы #if и #endif и переменные уровня класса.
8. В самом начале файла класса формы Form добавьте оператор #define EVENTINSTRUMENTATION. Это позволит вам использовать условную компиляцию кода.
9. Скомпилируйте пример и запустите его на выполнение. Щелкните на кнопке Button1, введите текст в текстовом поле TextBox и щелкните на кнопке ShowEventLog, чтобы увидеть список событий, которые были запущены.
10. Завершив выполнение приложения, удалите символы комментария в строке m_userInterfaceUpdateOccuring = true; кода обработчика событий Button_Click и повторно запустите приложение на выполнение. Обратите внимание, что установка этого флага предотвратила нежелательное выполнение кода приложения при запуске обработчиков событий в результате программного доступа к свойствам элементов управления.
//-------------------------------------------------------
//Поместить данную директиву #define в начале определения
//класса, если требуется регистрация событий
//#define EVENTINSTRUMENTATION
//-------------------------------------------------------
//-----------------------------------------------------------------------
//Флаг, указывающий обработчикам событий, должен ли из них осуществляться
//выход без выполнения каких-либо действий
//-----------------------------------------------------------------------
bool m_userInterfaceUpdateOccuring;
//Счетчики событий
private int m_radioButton1ChangeEventCount;
private int m_textBox1ChangeEventCount;
//-------------------------------------------------------------------------
//Код, который следует включать лишь в том случае, если приложение
//выполняется в режиме контроля запуска событий. Этот код характеризуется
//относительно высокими накладными расходами, и его следует компилировать и
//выполнять только тогда, когда выполняется диагностика.
//-------------------------------------------------------------------------
#if EVENTINSTRUMENTATION
private System.Collections.ArrayList m_instrumentedEventLog;
//------------------------------------------------------------------------
//Заносит записи о возникновении событий в массив, который мы
//можем просмотреть
//Примечание: Не делается никаких попыток ограничить размерность массива
// регистрационных записей, поэтому, чем дольше выполняется
// приложение, тем больше становится размер массива
//------------------------------------------------------------------------
private void instrumented_logEventOccurrence(string eventData) {
//Создать журнал событий, если он еще не был создан
if (m_instrumentedEventLog == null) {
m_instrumentedEventLog = new System.Collections.ArrayList();
}
//Зарегистрировать событие
m_instrumentedEventLog.Add(eventData);
}
//------------------------------------------------------------------------
//Отобразить список возникших событий
//Примечание: Этот вариант реализации довольно груб.
// Целесообразнее отображать список событий
// в отдельном диалоговом окне, которое специально выводится
// для этого на экран.
//------------------------------------------------------------------------
private void instrumentation_ShowEventLog() {
System.Windows.Forms.ListBox.ObjectCollection listItems;
listItems = listBoxEventLog.Items;
//Очистить список элементов
listItems.Clear();
//При отсутствии событий - выход
if (m_instrumentedEventLog == null) {
listItems.Add("0 Events");
return;
}
//Отобразить поверх списка общее количество
//подсчитанных нами событий
listItems.Add(m_instrumentedEventLog.Count.ToString() + " Events");
//Перечислить элементы списка в обратном порядке, чтобы первыми
//отображались самые последние из них
string logItem;
for(int listIdx = m_instrumentedEventLog.Count - 1; listIdx >= 0; listIdx--) {
logItem=(string) m_instrumentedEventLog[listIdx];
listItems.Add(logItem);
}
}
#endif
//------------------------------------------------------
//Событие изменения состояния переключателя RadioButton1
//------------------------------------------------------
private void radioButton1_CheckedChanged(object sender, System.EventArgs e) {
//Если обновление данных в пользовательском интерфейсе осуществляется
//приложением, то мы не хотим обрабатывать его так же, как если бы
//это событие было запущено пользователем. Если это именно так,
//то выйти из функции без выполнения каких-либо действий.
if (m_userInterfaceUpdateOccuring == true) {
return;
}
//Подсчитать, сколько раз выполнена обработка данного события
m_radioButtonlChangeEventCount++;
#if EVENTINSTRUMENTATION
//Зарегистрировать наступление события
instrumented_logEventOccurrence("radioButton1.Change:" + //Событие
m_radioButton1ChangeEventCount.ToString() + ":" + //Количество раз
radioButton1.Checked.ToString()); //Значение
#endif
//-------------------------------------------------------------
//Событие щелчка на кнопке Button1
//Имитирует обновление пользовательского интерфейса программным
//кодом, что может приводить к запуску обработчика события
//-------------------------------------------------------------
private void button1_Click(object sender, System.EventArgs e) {
//Указать на то, что мы не хотим, чтобы обработчики сразу же
//обрабатывали события, поскольку мы обновляем
//пользовательский интерфейс.
//m_userInterfaceUpdateOccuring = true;
radioButton1.Checked = true;
textBox1.Text = "Hello World";
//Обновление пользовательского интерфейса завершено
m_userInterfaceUpdateOccuring = false;
}
//------------------------------------------------------------------
//Обработчик события изменения состояния элемента управления TextBox
//------------------------------------------------------------------
private void textBox1_TextChanged(object sender, System.EventArgs e) {
//Если обновление данных в пользовательском интерфейсе осуществляется
//приложением, то мы не хотим обрабатывать его так же, как если бы
//это событие было запущено пользователем. Если это именно так,
//то выйти из функции без выполнения каких-либо действий.
if (m_userInterfaceUpdateOccuring == true) {
Интервал:
Закладка: