Как я могу получить X, Y позиции мыши относительно формы даже при нажатии на другой элемент управления? - PullRequest
6 голосов
/ 04 октября 2010

В настоящее время мой mousedown в форме даст мне x, y шнуры на этикетке.Этот ярлык, хотя, когда я нажимаю на него, я не получаю mousedown.Но когда я помещаю код в mousedown для метки, он дает шнуры, основанные на происхождении метки, а не на всей форме.

Моя цель - иметь возможность обнаружить x, y в любом местеформа.Даже если это на этикетке, кнопка.

Заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 04 октября 2010

Кажется немного хак, но ...

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        foreach (Control c in this.Controls)
        {
            c.MouseDown += ShowMouseDown;    
        }

        this.MouseDown += (s, e) => { this.label1.Text = e.X + " " + e.Y; };

    }

    private void ShowMouseDown(object sender, MouseEventArgs e)
    {
        var x = e.X + ((Control)sender).Left;
        var y = e.Y + ((Control)sender).Top;

        this.label1.Text = x + " " + y;
    }
}
3 голосов
/ 05 октября 2010

Вы можете получить местоположение, как это this.PointToClient (Cursor.Position) в форме для каждого элемента управления.

3 голосов
/ 04 октября 2010
protected override void OnMouseMove(MouseEventArgs mouseEv) 
{ 
    txtBoxX.Text = mouseEv.X.ToString(); 
    txtBoxY.Text = mouseEv.Y.ToString(); 
} 
2 голосов
/ 12 октября 2012

Я понимаю, что это было некоторое время назад, но я подумал, что это может кому-то помочь. Я думаю, что путь к этому рекурсивен:

public partial class Form1 : Form
{

public Form1()
{
    InitializeComponent();
    label1.MouseDown += MyMouseDown;
}

void MyMouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)//If it's left button that's the trigger
    {
        Control c = (Control)sender;
        if (c.Parent == null) return;//Has no more children, wrong condition?
        if(c.Parent != this)//We've reached top level
        {
            MyMouseDown(c.Parent, new MouseEventArgs(e.Button, 
                 e.Clicks, 
                 c.Parent.Location.X + e.X, 
                 c.Parent.Location.Y + e.Y, 
                 e.Delta));
            return;
         }
         //Do what shall be done here...
     }
}
}
2 голосов
/ 04 октября 2010

Вы можете настроить this.Location.
или использовать this.PointToClient(Cursor.Position) в форме и каждом элементе управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...