当鼠标悬停在鼠标悬停在Visual Basic.net中的按钮上时检测

时间:2014-04-29 23:01:12

标签: vb.net

所以我试图在24x7布局中在VB.net中创建一个调度网格(与UTorrent中的调度程序完全相同,如果有人熟悉的话)。我希望能够单击并拖动一系列方块来更改它们的值。

我能够找到主要有用的示例代码。

Private Sub DataGridView3_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView3.CellMouseMove
    Dim grvScreenLocation As Point = DataGridView3.PointToScreen(DataGridView3.Location)
    Dim tempX As Integer = DataGridView.MousePosition.X - grvScreenLocation.X + DataGridView3.Left
    Dim tempY As Integer = DataGridView.MousePosition.Y - grvScreenLocation.Y + DataGridView3.Top
    Dim hit As DataGridView.HitTestInfo = DataGridView3.HitTest(tempX, tempY)
    cellX = hit.RowIndex
    cellY = hit.ColumnIndex
    TextBox3.Text = cellX
    TextBox14.Text = cellY

End Sub

如上所述,这会产生所需的结果,但是我需要让它只在鼠标按钮关闭时才将cellx和celly返回到文本框。

2 个答案:

答案 0 :(得分:2)

这可以通过处理鼠标左键,鼠标左键和鼠标左键来完成。

当您在网格上收到鼠标左键向下事件时,记录鼠标位置并设置标记。如果设置了标志,则在鼠标移动处理程序中,突出显示初始位置和当前鼠标位置之间的所有单元格。接收鼠标左键(当设置网格时在网格上)提交单元格选择(并清除标记)。

我已成功将此技术用于fractal zoom

以下是您需要做的大致概述:

Dim isSelecting As Boolean
Dim selectionStart As Point

Protected Overrides Sub OnMouseLeftButtonDown(e As MouseButtonEventArgs)
    MyBase.OnMouseLeftButtonDown(e)
    Dim position = e.GetPosition(Me)
    Dim hit = VisualTreeHelper.HitTest(MyGrid, position)
    If hit IsNot Nothing Then
        isSelecting = True
        selectionStart = position
    End If
End Sub

Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    MyBase.OnMouseMove(e)
    If isSelecting Then
        Dim position = e.GetPosition(Me)
        ' Update selection
    End If
End Sub

Protected Overrides Sub OnMouseLeftButtonUp(e As MouseButtonEventArgs)
    MyBase.OnMouseLeftButtonUp(e)
    If isSelecting Then
        Dim position = e.GetPosition(Me)
        ' Commit selection
    End If
End Sub

答案 1 :(得分:0)

这给了我想要的东西。

Private cellX As Integer = 0
Private cellY As Integer = 0

Private Sub DataGridView3_MouseHover(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DataGridView3.CellMouseMove

    Dim grvScreenLocation As Point = DataGridView3.PointToScreen(DataGridView3.Location)
    Dim tempX As Integer = DataGridView.MousePosition.X - grvScreenLocation.X + DataGridView3.Left
    Dim tempY As Integer = DataGridView.MousePosition.Y - grvScreenLocation.Y + DataGridView3.Top
    Dim hit As DataGridView.HitTestInfo = DataGridView3.HitTest(tempX, tempY)
    cellX = hit.RowIndex
    cellY = hit.ColumnIndex
    If e.Button = Windows.Forms.MouseButtons.Left Then

        TextBoxX.Text = cellX
        TextBoxY.Text = cellY
        DataGridView3.Rows(cellX).Cells(cellY).Style.BackColor = Color.Red

    End If
End Sub
相关问题