2014-01-13 2 views
1

Я пытаюсь написать функцию, которая должна определять, находится ли мышь в диапазоне в пикселях (диапазон пикселей конкретного элемента управления)Определите, находится ли мышь над элементом управления? (над диапазоном пикселов управления)

Проблема в том, что функция работает только для границ Form, не работайте для кнопок или любого другого элемента управления, который я тестировал ... что мне не хватает?

''' <summary> 
''' Determinates whether the mouse pointer is over a pixel range of the specified control. 
''' </summary> 
''' <param name="Control">The control.</param> 
''' <returns> 
''' <c>true</c> if mouse is inside the pixel range, <c>false</c> otherwise. 
''' </returns> 
Private Function MouseIsOverControl(ByVal [Control] As Control) As Boolean 

    Return [Control].Bounds.Contains(MousePosition) 

End Function 

PS: Я знаю использование событий мыши, но эта функция предназначена для общего использования.

+1

'Return [Control] .ClientRectangle.Contains ([Control] .PointToClient (MousePosition))' –

+0

@ Бьорн-Роже Kringsjå Thankyou, но кажется, что это не очень эффективным, так как, например, мне нужно поставить MOSE вокруг + 10 пикселей над Picturebox, чтобы вернуть «True», если я поместил мышь рядом с углом изображения, я получаю «False», также если я попытаюсь узнать, есть ли мышь над кнопкой, всегда получаю «False» (когда должно быть правда). – ElektroStudios

+1

FYI: Я отредактировал комментарий. 'Me.PointToClient' -' [Control] .PointToClient'. –

ответ

4

Вам необходимо преобразовать MousePosition в координаты клиента и проверить управление ClientRectangle.

VB.NET

Imports System.Windows.Forms 

Public Function MouseIsOverControl(ByVal c As Control) As Boolean 
    Return c.ClientRectangle.Contains(c.PointToClient(Control.MousePosition)) 
End Function 

C#

using System.Windows.Forms; 

public bool MouseIsOverControl(Control c) 
{ 
    return c.ClientRectangle.Contains(c.PointToClient(Control.MousePosition)); 
} 
Смежные вопросы