Литмир - Электронная Библиотека
Содержание  
A
A

Пользовательские элементы управления являются мощной абстракцией, которую вы можете использовать в своих приложениях, но важно не пытаться применять их искусственно, без всякой на то необходимости. Если требуется обеспечить высокую степень интерактивности при взаимодействии конечного пользователя с приложением и/или для разработчика важно иметь возможность работать с детализированными событиями, то решение, основанное на пользовательских элементах управления, заслуживает рассмотрения. В листингах 11.9 и 11.10 представлена очень простая реализация пользовательского элемента управления в .NET Compact Framework. В листинге 11.9 содержится код, предназначенный для самого элемента управления, тогда как в листинге 11.10 — код, который используется для динамического создания экземпляра элемента управления, помещения его в форму и подключения к нему обработчика события. На рис. 11.6 показано выполняющееся на устройстве Pocket PC приложение, в котором присутствует данный нестандартный элемент управления.

НА ЗАМЕТКУ

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

В данном примере пользовательский элемент управления для простоты создается во время выполнения. Чтобы отобразить его для разработчика на стадии проектирования, в результате чего этот элемент управления будет виден в окне конструктора форм подобно любому другому стандартному элементу управления, в приложение следует кое-что добавить. Обсуждение этого вопроса выходит за рамки данной книги, однако соответствующая информация содержится в документации по .NET Compact Framework.Окно сообщения, появляющееся в ответ на запуск события щелчка на пользовательском элементе управления

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

Рис. 11.6. Окно сообщения, появляющееся в ответ на запуск события щелчка на пользовательском элементе управления

Для создания и запуска данного приложения потребуется выполнить следующие действия:

1. Начните новый проект Smart Device в Visual Studio NET и выберите в качестве целевой платформы Pocket PC.

2. Добавьте в проект новый класс и назовите его myButton. Перейдя в окно редактора кода класса введите код, представленный в листинге 11.9.

3. Перейдите в окно конструктора форм для формы Form1. Добавьте в форму кнопку. Дважды щелкните на кнопке для перехода в окно редактора кода и введите код, представленный в обработчике события button1_Click в листинге 11.10.

4. Введите за кодом обработчика события button1_Click оставшуюся часть кода, представленного в листинге 11.10.

5. Скомпилируйте пример и запустите его на выполнение. Щелкните на кнопке Button1.

Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем

//Простейший пользовательский элемент управления

public class myButton : System.Windows.Forms.Control {

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

 //Объекты, необходимые нам для рисования

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

 System.Drawing.Brush m_RectangleBrush;

 System.Drawing.Brush m_TextBrush;

 System.Drawing.Color m_RectangleColor;

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

 //Событие, которое мы хотим предоставить на обработку.

 //Это - общедоступный делегат.

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

 public event System.EventHandler EventButtonTurningBlue;

 //Конструктор

 public myButton() : base() {

  //ПРИМЕЧАНИЕ: Мы должны написать функцию Dispose() и

  //деструктор, который освобождает память от этих объектов

  //Создать необходимые кисти

  m_RectangleColor = System.Drawing.Color.Black;

  m_RectangleBrush = new System.Drawing.SolidBrush(m_RectangleColor);

  m_TextBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);

 }

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

 //Внутренним откликом на щелчок является

 //повторение трех различных цветов кнопки в цикле

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

 protected override void OnClick(System.EventArgs e) {

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

  //Важно: Вызвать базовую реализацию. Это

  //обеспечит возможность вызова любого обработчика событий,

  //подключенного к данному элементу управления

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

  base.OnClick(e);

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

  //Выбрать цвет новой кисти, исходя из цвета старой кисти

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

  if (m_RectangleColor == System.Drawing.Color.Black) {

   m_RectangleColor = System.Drawing.Color.Blue;

   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

   //Запустить событие                                   !

   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

   if (EventButtonTurningBlue!= null) {

    //Возбудить событие без передачи аргумента

    EventButtonTurningBlue(this, null);

   }

  }

  else

   if (m_RectangleColor == System.Drawing.Color.Blue) m_RectangleColor = System.Drawing.Color.Red;

   else m_RectangleColor = System.Drawing.Color.Black;

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

  //Освободить старую кисть

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

  m_RectangleBrush.Dispose();

122
{"b":"947732","o":1}