Получить положение курсора относительно элемента управления-C#

Я хочу получить положение мыши относительно элемента управления, в котором присутствует указатель мыши. Это означает, что когда я поместите курсор в начальную точку (верхний левый угол) управления он должен дать (0,0). Я использую следующий код:

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);         
    } 

но это дает положение по отношению к экрану не к контролю.

пример кода будет оценен по достоинству.

8 ответов


вы можете напрямую использовать Location свойства MouseEventArgs аргумент передается обработчику событий.

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    Text = e.Location.X + ":" + e.Location.Y;      
} 

использовать управление.PointToClient чтобы преобразовать точку из относительных координат экрана в относительные координаты управления. Если вам нужно пойти в другую сторону, используйте PointToScreen.


следующее даст вам координаты мыши относительно вашего элемента управления. Например, это приводит к (0,0), если мышь находится над верхним левым углом элемента управления:

var coordinates = yourControl.PointToClient(Cursor.Position);

для получения относительного от абсолютного и абсолютного от относительных координат можно использовать следующие методы:

Point Control.PointToClient(Point point);

Point Control.PointToScreen(Point point);

просто вычесть из позиции курсора левую и верхнюю координаты элемента управления:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);

Я использую MouseLocation и PointToClient для проверки. А затем используйте его в таймере!

bool IsMouseHover(Control c, Control container)
        {
            Point p = Control.MousePosition;
            Point p1 = c.PointToClient(p);
            Point p2 = container.PointToClient(p);
            if (c.DisplayRectangle.Contains(p1) && container.DisplayRectangle.Contains(p2))
            {
                return true;
            }
            return false;
        }

private void lienzo_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
    Point coordenadas = new Point();
    coordenadas = Mouse.GetPosition(lienzo);

    string msg = "Coordenadas mouse :" + coordenadas.X + "," + coordenadas.Y;
    MessageBoxResult resultado;
    string titulo = "Informacion";
    MessageBoxButton botones = MessageBoxButton.OK;
    MessageBoxImage icono = MessageBoxImage.Information;

    resultado = MessageBox.Show(msg, titulo, botones, icono);
}

где "lienzo" моя панель холста


курсор.Положение точки возврата на экране, но управление.PointToClient(Курсор.Position) возвращает точку управления (например, control - > panel). В вашем случае у вас есть e.Найдите точку возврата на элементе управления.