UltraGrid WinForms下,进行双击的一个问题。
正在状态下双击没有任何问题,如果用户在进行滚动条,滚动时,因引发双击事件,而影响用户操作。
下面这段代码,是处理这个问题的。在官方网站上找到。
'Cast the sender into an UltraGrid
Dim grid As UltraGrid = DirectCast(sender, UltraGrid)
'Get the last element that the mouse entered
Dim lastElementEntered As UIElement = Me.UltraGrid1.DisplayLayout.UIElement.LastElementEntered
'See if there's a RowUIElement in the chain.
Dim rowElement As RowUIElement
If TypeOf lastElementEntered Is RowUIElement Then
rowElement = DirectCast(lastElementEntered, RowUIElement)
Else
rowElement = DirectCast(lastElementEntered.GetAncestor(GetType(RowUIElement)), RowUIElement)
End If
If rowElement Is Nothing Then Return
'Try to get a row from the element
Dim row As UltraGridRow = DirectCast(rowElement.GetContext(GetType(UltraGridRow)), UltraGridRow)
'If no row was returned, then the mouse is not over a row.
If (row Is Nothing) Then Return
'The mouse is over a row.
'This part is optional, but if the user double-clicks the line
'between Row selectors, the row is AutoSized by
'default. In that case, we probably don't want to do
'the double-click code.
'Get the current mouse pointer location and convert it
'to grid coords.
Dim MousePosition As Point = grid.PointToClient(Control.MousePosition)
'See if the Point is on an AdjustableElement - meaning that
'the user is clicking the line on the row selector
If Not lastElementEntered.AdjustableElementFromPoint(MousePosition) Is Nothing Then Return
'Everthing looks go, so display a message based on the row.
MessageBox.Show(Me, "The key of the row is:" + row.Cells(0).Value.ToString())