Категории
ТОП за месяц
onlinekniga.com » Компьютеры и Интернет » Программирование » Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 122 123 124 125 126 127 128 129 130 ... 206
Перейти на страницу:

■ Когда на стадии проектирования точное количество необходимых элементов управления не известно.  Например, если вашему приложению требуется массив переключателей, количество которых зависит от количества элементов, возвращаемых в результате запроса к базе данных, то вам приходится создавать этот массив во время выполнения, когда количество переключателей становится известным.

■ Когда для элемента управления, который вы хотите использовать, не существует реализации на стадии проектирования.  При работе с .NET Compact Framework создание экземпляров пользовательских элементов управления на стадии проектирования может представлять значительные трудности; на разработку этого часто может уходить больше времени, чем если воспользоваться для элементов управления их версиями времени выполнения. Если вы создаете пользовательский элемент управления для собственных нужд разработки, то может оказаться нецелесообразным затрачивать усилия на создание его версии, используемой только на этапе разработки, только ради того, чтобы она появилась в окне конструктора форм. Создавая данный элемент управления во время выполнения, вы избавляете себя от затраты этих усилий.

Чтобы обеспечить работоспособность динамического элемента управления после его создания, вы должны выполнить три дополнительных типа операций:

1. Инициализация элемента управления. Вы должны установить размер и местоположение элемента управления, а также другие свойства, значения которых должны быть заданы до его отображения.

2. Подключение всех событий, которые вы хотите обрабатывать. Большинство элементов управления могут приносить пользу лишь тогда, когда к ним присоединяется код, обрабатывающий события, которые они могут генерировать. По отношению к каждому из подключаемых событий вы должны предпринять ряд действий:

 а. Вам нужна функция, которая является приемником события (то есть вызывается при его запуске).

 б. Вы должны создать обработчик события (иначе называемый делегатом) с подходящей сигнатурой функции, который указывает на вашу функцию приемника события.

 в. Вы должны зарегистрировать этот обработчик событий в элементе управления.

Сказанное может показаться вам слишком сложным, но на практике все оказывается проще и осуществляется с помощью всего лишь одной строки кода. Например, в приведенном ниже коде выполняются все три действия, описываемые пунктами а, б и в.

newButton.Click += new System.EventHandler(this.ClickHandlerForButtons);

Более подробно, по составляющим:

 а. this.ClickHandlerForButtons — это функция приемника событий.

 б. new System.EventHandler() — это делегат, указывающий на приемник событий.

 в. newButton.Click +=… — добавляет обработчик событий в список обработчиков событий, которые вызываются при запуске события.

Полезно заглянуть в код функции InitializeComponent() формы, откуда можно скопировать код регистрации обработчика события. Важно подчеркнуть, что одна функция может служить приемником произвольного числа самых различных событий. Данная возможность оказывается удобной при работе с массивами элементов управления, поскольку события нескольких элементов управления могут отображаться в единственную функцию.

3. Задание, путем использования свойства Parent нового элемента управления, в качестве родительской той формы, на которой этот элемент должен отображаться. Фактически, в результате выполнения именно этого последнего шага элемент управления создается и размещается на форме. Если значением свойства Parent элемента управления является null, то элемент управления не принадлежит форме.

Пример создания динамического элемента управления

На рис. 13.8 и в листинге 13.2 представлен пример приложения, иллюстрирующего создание кнопок Button и подключение к ним обработчиков событий Click. Вы можете легко адаптировать пример для создания любых желаемых элементов управления. 

Рис. 13.8. Динамическое создание элементов управления во время выполнения

Представленный в листинге 13.2 код принадлежит форме в проекте Pocket PC. Для создания и запуска приложения потребуется выполнить следующие действия:

1. Запустите Visual Studio .NET (2003 или более позднюю версию) и создайте приложение C# Smart Device Application.

2. Выберите в качестве целевой платформы Pocket PC. (Для вас будет автоматически создан проект, и на экране появится окно конструктора форм Pocket PC.)

3. Добавьте в форму кнопку Button и переименуйте ее в buttonCreateNewButtons.

4. Дважды щелкните на кнопке, которую вы только что добавили в окне конструктора форм. На экране отобразится окно редактора кода вместе со скелетом функции privatevoidbuttonCreateNewButtons_Click(object sender, System.EventArgs e). Введите в эту функцию приведенный ниже код.

5. Перейдя в окно редактора кода, введите оставшуюся часть приведенного ниже кода, включая те его части, которые расположены выше и ниже кода функции, который вы только что ввели.

6. Установите для свойства MinimizeBox формы значение false. Благодаря этому во время выполнения в верхней правой части формы появится кнопка OK, с помощью которой вы легко сможете закрыть форму и выйти из приложения. Эта возможность оказывается очень полезной при многократном тестировании приложения.

7. Запустите приложение. Вы должны заметить, что каждый раз, когда вы щелкаете на кнопке buttonCreateNewButtons, на форме появляется новая кнопка (как показано на рис. 13.8). Щелчки на любой из вновь созданных кнопок должны приводить к запуску приведенного ниже кода обработчика событий и отображению окна сообщений с текстом, соответствующим той кнопке, на которой был выполнен щелчок

Листинг 13.2. Динамическое создание элементов управления на форме во время выполнения

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

//Счетчик количества создаваемых кнопок

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

private int m_nextNewButtonIndex;

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

//ОБРАБОТЧИК СОБЫТИЙ: Обработчик щелчка на кнопке, которая

// имеется на нашей форме.

//

//Эта функция создает новую кнопку, присоединяет ее к нашей форме

//и подключает обработчик события щелчка для нее

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

private void buttonCreateNewButtons_Click(object sender, System.EventArgs e) {

 //Впоследствии мы начнем создавать новые кнопки, начиная

 //снизу экрана, поэтому ограничиваем их количество восемью

 if (m_nextNewButtonIndex > 8) {

  return;

 }

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

 //Создать кнопку (еще не присоединенную к нашей форме)

 //установить ее местоположение, размеры и текст

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

 const int newButtonHeight = 15;

 System.Windows.Forms.Button newButton;

 newButton = new System.Windows.Forms.Button();

 newButton.Width = 100;

 newButton.Height = newButtonHeight;

 newButton.Left = 2;

 newButton.Top = (newButtonHeight + 2) * m_nextNewButtonIndex;

 newButton.Text = "New Button " + m_nextNewButtonIndex.ToString();

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

 //Присоединить обработчик к событию щелчка на данном

 //элементе управления.

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

 newButton.Click += new System.EventHandler(this.ClickHandlerForButtons);

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

 //Присоединить эту кнопку к форме. По сути,

 //это создаст кнопку на форме!

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

 newButton.Parent = this;

 //Увеличить счетчик в соответствии с созданием очередной кнопки

 m_nextNewButtonIndex++;

}

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

//Обработчик событий, который мы динамически подключаем

//к нашим новым кнопкам

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

private void ClickHandlerForButtons(object sender, System.EventArgs e) {

 Button buttonCausingEvent;

 buttonCausingEvent = (System.Windows.Forms.Button)sender;

 //Вызвать окно сообщений, извещающее о том,

 //что мы получили событие

 System.Windows.Forms.MessageBox.Show("Click event from: nr'" + buttonCausingEvent.Text + "'");

}

Создание пользовательских элементов управления и перекрытие поведения существующих элементов управления

В .NET Compact Framework допускается два вида наследования элементов управления: 1) создание пользовательского элемента управления с нуля, и 2) перекрытие поведения существующих элементов управления System.Windows.Forms.*, не связанного с их перерисовкой/визуализацией.

Прежде всего, следует сказать несколько слов о том, чего .NET Compact Framework (версия 1.1) не поддерживает: она, в отличие от .NET Framework, не позволяет разработчикам перекрывать визуальные характеристики перерисовки стандартных элементов управления. (Например, вы не можете использовать для наследования элементы управления Button, TreeView, TextBox или другие стандартные элементы управления, перекрывая при этом способ их перерисовки.) Это сделано в интересах функционирования внутренних механизмов.

1 ... 122 123 124 125 126 127 128 129 130 ... 206
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре.
Комментарии