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

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

Листинг 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();
  //----------------------------------------------------------------
  //Создать новую кисть, которую мы собираемся использовать для фона
  //----------------------------------------------------------------
  m_RectangleBrush = new System.Drawing.SolidBrush(m_RectangleColor);
  //------------------------------------------------------------
  //Сообщить операционной системе, что наш элемент управления
  //должен быть перерисован, как только представится возможность
  //------------------------------------------------------------
  this.Invalidate();
 }
 //----------------------------------------------------------------
 //Ради интереса подсчитаем, сколько раз осуществлялась перерисовка
 //----------------------------------------------------------------
 int m_paintCount;
 protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) {
  //--------------------------------------------
  //ВАЖНО: Вызвать базовый класс и позволить ему
  //выполнить работу по рисованию
  //--------------------------------------------
  base.OnPaint(e);
  //Увеличить на единицу значение счетчика вызовов
  m_paintCount = m_paintCount + 1;
  //-------------------------------------------------------------------
  //Важно:
  //Вместо того чтобы создавать объект Graphics, мы получаем его
  //на время данного вызова. Это означает, что освобождать память путем
  //вызова метода .Dispose() объекта - не наша забота
  //-------------------------------------------------------------------
  System.Drawing.Graphics myGfx;
  myGfx = e.Graphics;
  //Нарисовать прямоугольник
  myGfx.FillRectangle(m_RectangleBrush, 0, 0, this.Width,this.Height);
  //Нарисовать текст
  myGfx.DrawString("Button! Paint: " + m_paintCount.ToString(), this.Parent.Font, m_TextBrush, 0, 0);
 } //конец функции
} //конец класса

Оглавление книги


Генерация: 0.086. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз