Главная » C#, Компоненты » Обработка событий мыши в режиме разработки

0

Класс controiDesigner имеет специальные методы режима разработки не только для отрисовки, но и для обработки событий мыши. Это довольно удобно, т. к. позволяет отделить код, относящийся к режиму разработки, от кода времени выполнения.

? Метод protected virtual void OnMouseEnter () ; вызывается, КОГда МЫШЬ

попадает на элемент управления. О Метод protected virtual void OnMouseLeave (); вызывается, когда МЫШЬ

уходит с элемента управления. В качестве примера я расширил код из предыдущего раздела. В методе OnMouseEnter о мы выставляем специальный флаг mouseover, а в методе OnMouseLeave О сбрасываем его. Таким образом, проверяя этот флаг при отри- совке элемента управления, мы добиваемся, чтобы информационное сообщение отображалось, только когда курсор мыши находится над компонентом (листинг 6.11).

Здесь же стоит ответить на один вопрос, часто возникающий при обработке событий мыши в режиме разработки. Как обработать двойной щелчок мыши? Проще всего сделать это, перекрыв метод DoDefaultActionO (см. разд. 6.11), как это сделано в листинге 6.11. Кстати, с одиночным щелчком мыши дела обстоят несколько сложнее— для обработки одиночного щелчка придется обрабатывать очередь сообщений (см. разд. 6.12).

Листинг 6.11. Пример обработки событии мыши в режима разработки

using System;

using System.Collections;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms.Design;

using System. Drawing;

using System.ComponentModel;

using System. Windows. Forms;

namespace MyControl {

class GradientLabelDesigner : ControiDesigner

f

protected bool mouseOver;

II Выводим дополнительную информацию во время разработки protected override void OnPaintAdornments(PaintEventArgs ре)

{

base.OnPaintAdornments(ре);

if (mouseOver) // если курсор над компонентом {

string text = "(с) Copyright information here"; pe.Graphics.DrawString(text, this.Control.Font, new SolidBrush(Color.Black), 0,

this.Control.Height – (int)pe.Graphics.MeasureString ( text, this.Control.Font).Height – 3);

}

}

// Попадание мыши на область компонента protected override void OnMouseEnter()

{

mouseOver = true; base -OnMouseEnter(); Control.Invalidate();

}

// Уход мыши с области компонента

protected override void OnMouseLeave() {

mouseOver = false; base.OnMouseLeave(); Control.Invalidate();

}

// Двойной щелчок мыши

public override void DoDefaultAction() {

//base.DoDefaultAction(); MessageBox.Show("Двойной щелчок!");

}

}

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии