none
[VB.NET WiNForm] 鼠标和坐标的问题 RRS feed

  • 问题

  • 我在form1上建了一个label1:location=40,40 size=120,120
    然后想建立一个单击label的事件:能够返回鼠标的位置

        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
            Dim i%, j%, x%, y%
            i = MousePosition.X
            j = MousePosition.Y
            x = j - Label1.Location.X
            y = j - Label1.Location.Y
            MsgBox(i & " " & j & " " & x & " " & y)
        End Sub

    使用后发现一个问题:返回的值特别大x有200+,y也有200+,然后 又建立单击窗体的事件
        Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
            Dim i%, j%
            i = MousePosition.X
            j = MousePosition.Y
            MsgBox(i & " " & j)
        End Sub
    发现鼠标在label1左上方单击时,x、y就有近200了,我label1的位置不是40,40,怎么会这样
    • 已移动 feiyun0112Moderator 2009年2月9日 3:11 VB.NET (从 .NET Framework 一般性问题讨论区 移动到 Visual Basic)
    2009年2月9日 2:39

答案

  • 因为 、



    MousePosition 返回的是鼠标在屏幕的x,y
    你还要减去form 的location

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove


        Me
    .Text = MousePosition.X & " ," & MousePosition.Y


    End Sub

    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 ww-air 2009年2月9日 3:08
    2009年2月9日 2:59

全部回复

  • 你好!
       你用MousePosition取得的坐标是相对与屏幕左上角的坐标,不是相对与窗体左上角的坐标。 

    周雪峰
    2009年2月9日 2:55
    版主
  • 因为 、



    MousePosition 返回的是鼠标在屏幕的x,y
    你还要减去form 的location

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove


        Me
    .Text = MousePosition.X & " ," & MousePosition.Y


    End Sub

    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 ww-air 2009年2月9日 3:08
    2009年2月9日 2:59
  •  

    我改了一下

    Me.Text = MousePosition.X - Me.Location.X & " ," & MousePosition.Y - Me.Location.Y

    还是有点出入,我鼠标移动的时候如果移动到label1上面时就不更新form1.text了

    这时我发现:

    从上往下一直移动到label1,Y停留在62

    从左往右一直移动到label1,X停留在42

    而我的label1的location一直是40,40

    42 好理解,就是label1.location.x 实际上是43 而不是40,因为默认值里面form1有margin,它的值是3, 0, 3, 0

    然后23=(62+1-40)就不知道是该怎么写了
    dim x%,y%
    x = MousePosition.X - Me.Location.X - gl1.Location.X - Me.Margin.Left
    y = MousePosition.Y - Me.Location.Y - gl1.Location.Y - Me.Margin.Top - ?
    Me.Text =x & "," & y

     

    2009年2月9日 3:18