不同的控制的越来越鼠标位置(getting mouse position of different

2019-10-29 15:50发布

我还有一个面板(PANEL1)内的面板(是Panel2)。 我想PANEL1的鼠标位置,但是当我将我的鼠标是Panel2,下面的代码停止工作。

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

我怎样才能得到它读取鼠标参数,即使鼠标在是Panel2? 谢谢!

编辑:是Panel2位于中心x = 100,Y = PANEL1 100。 如果我将我的是Panel2鼠标左上角它给我的坐标例如1x1的,在这里我需要的位置上像101x101 PANEL1

编辑2:我并不想拖动它,只是读原装面板(PANEL1)的坐标,这样我就可以计算出缩放是Panel2偏移。 所以我只需要鼠标移动,没有别的。 谢谢

Answer 1:

如果你只需要做到这一点,而鼠标按键被按下(例如,因为您要跟踪拖放操作或选择),那么你可以做到以下几点:

  1. 在你的MouseDown处理程序,调用this.Capture = true;
  2. 现在,即使当鼠标移动到另一个控制您的MouseMove处理器将接收鼠标移动的消息。
  3. 在你的MouseUp处理程序,调用this.Capture = false; - 注意:如果你忘记这样做,在同一进程的其他控件将不会收到任何鼠标消息。

除此之外,这是非常棘手的来自其他控件的MouseMove消息,而无需添加鼠标处理程序的其他控件。

的主要事情this.Capture是,你需要一个好时机,它设置为true,另一个设定好时间回假。 一般情况下,这是一个在的MouseDown和MouseUp我的描述进行。

但是,你也可以从是Panel2相对的COORDS转换为Panel1的相对就像这样:

从是Panel2 COORDS转换为屏幕坐标:

Point screenCoords = panel2.PointToScreen(mouseCoordInPanel2);

然后从屏幕COORDS到Panel1的相对COORDS转换:

Point mouseCoordInPanel1 = panel1.PointToClient(screenCoords);

要做到这一点,你就必须有一个是Panel2处理的MouseMove,你这样做转换,是Panel2需要以打电话Panel1的参考panel1.PointToClient()



Answer 2:

您还必须分配给该小组的活动。



Answer 3:

你不能把事件处理程序是Panel2,然后用左/ PANEL1和是Panel2的顶部性质,以抵消是Panel2内的鼠标位置获得PANEL1所需的位置?



Answer 4:

我还认为,到第二面板分配一个事件将是最好的事情。 当鼠标在面板1,坐标将被直接提供; 当它是上面板2,它们会被占两个面板之间的相对位置被转换(非常简单:变化X / Y位置;其不需要被硬编码,但在运行时更新后的值)。



文章来源: getting mouse position of different control
标签: c# mousemove