Подтвердить что ты не робот

Получить позицию курсора относительно элемента управления - С#

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

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

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

Будет оценен пример кода.

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Point Control.PointToClient(Point point);

Point Control.PointToScreen(Point point);

Ответ 5

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

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

Ответ 6

Я использую 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;
        }

Ответ 7

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" - моя панель холста

Ответ 8

Cursor.Position возвращает Point on Screen, но Control.PointToClient(Cursor.Position) возвращает точку управления (например, панель управления → ). В вашем случае у вас есть e.Locate, которая возвращает точку управления.