Практическое руководство. Создание функциональности OnEnter
Обновлен: Ноябрь 2007
Платформа .NET Compact Framework не поддерживает методы OnEnter и OnLeave для элементов управления. Тем не менее, поскольку поддерживается метод OnMouseMove, этот метод и свойство Capture можно использовать для определения момента, когда указатель мыши появляется над элементом управления или покидает его.
В этом примере определяется простой пользовательский элемент управления, MouseCapture, который имеет синий цвет, если передвижение указателя мыши происходит внутри элемента управления, и светло-серый цвет, если указатель мыши перемещается вне элемента управления. Для этого с помощью метода OnMouseMove осуществляется проверка попадания указателя мыши в его прямоугольник ClientRectangle.
Обратите внимание, что касание элемента управления не изменяет его цвет. Необходимо перетаскивать указатель мыши, как при операции перетаскивания.
Создание и реализация пользовательского элемента управления
Добавьте в проект пользовательский элемент управления MouseCapture.
Public Class MouseCapture Inherits Control Public Sub New() Me.BackColor = Color.LightGray End Sub 'New ' If the mouse is over the control, Capture is true. Protected Overrides Sub OnMouseMove(e As MouseEventArgs) Me.Capture = Me.ClientRectangle.Contains(e.X, e.Y) If Me.Capture Then ' Blue indicates inside the control. Me.BackColor = Color.Blue Else Me.BackColor = Color.LightGray End If End Sub End Class
public class MouseCapture : Control { public MouseCapture() { this.BackColor = Color.LightGray; } // If the mouse is over the custom control, Capture is true. protected override void OnMouseMove(MouseEventArgs e) { this.Capture = this.ClientRectangle.Contains(e.X, e.Y); if (this.Capture == true) this.BackColor = Color.Blue; else this.BackColor = Color.LightGray; } }
Создайте экземпляр MouseCapture в конструкторе формы или для ее события Load.
' Assumes mc has been delared ' for the form as type MouseCapture. Dim mc As New MouseCapture() mc.Parent = Me mc.Bounds = New Rectangle(20, 50, 100, 50)
// Assumes mc has been delared // for the form as type MouseCapture. mc = new MouseCapture(); mc.Parent = this; mc.Bounds = new Rectangle(20, 50, 100, 50);
Компиляция кода
Для этого примера требуются ссылки на следующие пространства имен: