Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
Листинг 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: \n\r'" + buttonCausingEvent.Text + "'");

}

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

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

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

Разработчик, желающий придать нестандартный внешний вид элементу управления в .NET Compact Framework, должен породить его от базового класса Control (System.Windows.Forms.Control), который допускает пользовательскую визуализацию элементов управления. В наибольшей степени такая возможность полезна в случае тех элементов управления, которые предлагают совершенно новые возможности взаимодействия с пользователем, а не тех, которые обеспечивают видоизмененное поведение существующих элементов управления. Элементарный пример того, как создать с нуля элемент управления с нестандартной визуализацией, приводится в главе 11; этот пример послужит вам отличной отправной точкой для создания аналогичного собственного элемента управления, если в этом возникнет необходимость.

Несмотря на то что .NET Compact Framework не поддерживает перекрытие поведения внутренних элементов управления, связанного с их визуализацией, она поддерживает перекрытие их функционального поведения. Существует два способа расширения возможностей внутренних элементов управления: 1) добавление дополнительных методов, свойств и событий, которые обеспечивают предоставление добавочной высокоуровневой функциональности, и 2) перекрытие существующих свойств и методов, для создания специфических возможностей. Хорошим примером, иллюстрирующим использованием обоих способов, является создание элемента TextBox, который осуществляет фильтрацию, принимая лишь входные данные определенного формата. Пример решения такой задачи представлен в листингах 13.3 и 13.4.

Пример элемента управления TextBox с фильтром

Если при вводе данных должны быть выдержаны определенные требования форматирования, то часто оказывается полезным создать пользовательский элемент управления, который вынуждает соблюдать необходимые критерии. В качестве типичного для США примера можно привести ввод номера карточки социального страхования. Эти номера имеют формат ###-##-####, представляющий три цифры, разделитель в виде дефиса, за которым следуют еще две цифры, дефис и последние четыре цифры. Существует много других случаев, когда навязывание формата ввода данных оказывается полезным, например, почтовые коды (ZIP-коды). В разных странах предусмотрены свои форматы кодов, одни из которых — цифровые, а другие — буквенно-цифровые. Так, в почтовые коды Канады и Великобритании входят как цифры, так и буквы. Во всех подобных случаях, когда требуется строго определенный ввод, возможность включения фильтра в элемент управления TextBox представляет большую ценность. Было бы очень кстати, если бы у этого элемента управления было свойство, позволяющее информировать пользователя о том, соответствует ли введенный в настоящее время текст требованиям определения достоверного и завершенного ввода. В нашем примере кода будет реализована как фильтрация входных данных, так и проверка их достоверности.

Поделиться с друзьями: