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

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

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

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

  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;

  //Нарисовать прямоугольник

Перейти на страницу:

Похожие книги