【问题标题】:Read picture box mouse coordinates on click单击时读取图片框鼠标坐标
【发布时间】:2016-08-08 20:27:53
【问题描述】:

我有一个加载了图片的图片框,我想在单击图片时读取位置(如图片框内的 x,y 中);这可能吗 ?更重要的是,我可以在鼠标悬停时读取这些坐标(点)吗?

我知道我必须使用给定的事件(鼠标单击和鼠标悬停),但不知道如何读取鼠标指针恰好所在的坐标。

【问题讨论】:

    标签: c# mouse coordinates picturebox


    【解决方案1】:

    虽然其他答案是正确的,但让我补充一下。 您已经指出您需要为此连接MouseClickMouseOver 事件。实际上不需要挂钩这些事件来获取Coordinates,您可以在Click 事件本身中获取Coordinates

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        MouseEventArgs me = (MouseEventArgs)e;
        Point coordinates = me.Location;
    }
    

    上述代码有效,因为 Click 事件的 e 参数包装了 MouseEventArgs,您可以直接转换并使用它。

    【讨论】:

    • 如果 OP 想要(我猜很明显)获取相对于图片框的点击点坐标,这就是答案。
    • 这是正确的,只要图像在PictureBox 中呈现时没有任何转换。如果渲染的版本被拉伸、缩放或平移,则 MouseEventArgs.Location 属性将需要应用相同的转换才能在图像坐标中获得点击。
    • @kdbanman 转换与获取图片框的点击位置有什么关系? Op 需要相对于图片框而不是其中的图像的鼠标坐标。
    【解决方案2】:

    可以得到X和Y坐标如下,

     this.Cursor = new Cursor(Cursor.Current.Handle);
    
      int xCoordinate = Cursor.Position.X;
      int yCoordinate = Cursor.Position.Y;
    

    如果要获取图片框内的坐标,使用如下代码,

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        int xCoordinate = e.X;
        int yCoordinate = e.Y;
    }
    

    【讨论】:

    • mouseUp 不需要所有这些,但可以在 mouse_hover 中使用它
    • 这给出了相对于表格的坐标。不要到 PictureBox 边界...
    • 这个答案不是和@NoIdeaForName 的答案差不多吗?
    • @StigCoder04 是的,它们是相同的,除了它们发布的时间戳:)
    【解决方案3】:

    我只是总结一下答案:

    MouseClickMouseUp 和许多其他事件中,您拥有MouseEventArgs,其中包含鼠标的Location

    MouseHover 但是你没有MouseEventArgs 因此,如果你需要光标的位置,使用编码器示例:

      private void Form1_MouseHover(object sender, EventArgs e)
      {
         this.Cursor = new Cursor(Cursor.Current.Handle);
    
         int xCoordinate = Cursor.Position.X;
         int yCoordinate = Cursor.Position.Y;
      }
    

    【讨论】:

      【解决方案4】:

      如何连接 MouseUp 事件,然后从 MouseEventArgs 获取位置?

      像这样:

      private void pictureBox_MouseUp(object sender, MouseEventArgs e)
      {
          Point mousePointerLocation = e.Location;
      }
      

      【讨论】:

      • 它只需要改变即可工作:Point MouseLoc = e.Location;谢谢!
      • 是的,我在写完之后也发现了我的错误。感谢您指出!很高兴它有帮助! :)
      猜你喜欢
      • 2021-05-31
      • 2015-06-29
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多