处理表单上的所有控件的“单击”。获取鼠标位置

时间:2013-03-27 10:09:16

标签: winforms event-handling controls mouseevent

我正在处理代表网格的面板中的窗体。

我正在尝试创建一个处理所有鼠标点击的事件处理程序,无论点击发生在哪个面板上,然后将PictureBox移动到面板的位置。

我设法找到一个涵盖事件处理程序的主题,但我无法从事件处理程序中获取鼠标单击的位置。下面是我到目前为止的代码(主要是从另一篇文章中捏):

private void Form1_Load(object sender, EventArgs e)
{
    foreach (Control c in this.Controls)
    {
        c.MouseClick += new MouseEventHandler(myEvent_handler_click);
    }
}

public void myEvent_handler_click(object sender, EventArgs e)
{
    Point point = new Point(e.X, e.Y);

    game.MoveToSquare(point);
}

代码行Point point = new Point(e.X, e.Y);不起作用,因为我无法引用X的{​​{1}}或e的{​​{1}}。

如何在点击鼠标时获取鼠标的位置?

感谢任何帮助。如果我不够清楚,请随时问我更多问题!

1 个答案:

答案 0 :(得分:1)

事件处理程序的delegate定义如下:

public delegate void MouseEventHandler(object sender, MouseEventArgs e);

MouseEventArgs继承自EventArgs,这就是您的代码正常运作的原因。如果您更改了EventHandler的定义,则应该可以访问坐标:

public void myEvent_handler_click(object sender, MouseEventArgs e)
{
    Point point = new Point(e.X, e.Y);
}

您也可以访问e.Location来获取积分:

Point point = e.Location;