Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/09/2004, 01:48
ruben_sga
 
Fecha de Ingreso: septiembre-2004
Mensajes: 29
Antigüedad: 19 años, 7 meses
Puntos: 0
Parte_2:

Private Sub ListDragSource_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseDown

' Get the index of the item the mouse is below.
indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y)

If (indexOfItemUnderMouseToDrag <> ListBox.NoMatches) Then

' Remember the point where the mouse down occurred. The DragSize indicates
' the size that the mouse can move before a drag event should be started.
Dim dragSize As Size = SystemInformation.DragSize

' Create a rectangle using the DragSize, with the mouse position being
' at the center of the rectangle.
dragBoxFromMouseDown = New Rectangle(New Point(e.X - (dragSize.Width / 2), _
e.Y - (dragSize.Height / 2)), dragSize)
Else
' Reset the rectangle if the mouse is not over an item in the ListBox.
dragBoxFromMouseDown = Rectangle.Empty
End If

End Sub

Private Sub ListDragSource_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseUp

' Reset the drag rectangle when the mouse button is raised.
dragBoxFromMouseDown = Rectangle.Empty
End Sub

Private Sub ListDragSource_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseMove

If ((e.Button And MouseButtons.Left) = MouseButtons.Left) Then

' If the mouse moves outside the rectangle, start the drag.
If (Rectangle.op_Inequality(dragBoxFromMouseDown, Rectangle.Empty) And _
Not dragBoxFromMouseDown.Contains(e.X, e.Y)) Then

' Creates custom cursors for the drag-and-drop operation.
Try
MyNormalCursor = New Cursor("3dwarro.cur")
MyNoDropCursor = New Cursor("3dwno.cur")

Catch
' An error occurred while attempting to load the cursors so use
' standard cursors.
UseCustomCursorsCheck.Checked = False
Finally
' The screenOffset is used to account for any desktop bands
' that may be at the top or left side of the screen when
' determining when to cancel the drag drop operation.
screenOffset = SystemInformation.WorkingArea.Location

' Proceed with the drag and drop, passing in the list item.
Dim dropEffect As DragDropEffects = ListDragSource.DoDragDrop(ListDragSource.Items(ind exOfItemUnderMouseToDrag), _
DragDropEffects.All Or DragDropEffects.Link)

' If the drag operation was a move then remove the item.
If (dropEffect = DragDropEffects.Move) Then
ListDragSource.Items.RemoveAt(indexOfItemUnderMous eToDrag)

' Select the previous item in the list as long as the list has an item.
If (indexOfItemUnderMouseToDrag > 0) Then
ListDragSource.SelectedIndex = indexOfItemUnderMouseToDrag - 1

ElseIf (ListDragSource.Items.Count > 0) Then
' Selects the first item.
ListDragSource.SelectedIndex = 0
End If
End If

' Dispose the cursors since they are no longer needed.
If (Not MyNormalCursor Is Nothing) Then _
MyNormalCursor.Dispose()

If (Not MyNoDropCursor Is Nothing) Then _
MyNoDropCursor.Dispose()
End Try

End If
End If
End Sub
Private Sub ListDragSource_GiveFeedback(ByVal sender As Object, ByVal e As GiveFeedbackEventArgs) Handles ListDragSource.GiveFeedback

' Use custom cursors if the check box is checked.
If (UseCustomCursorsCheck.Checked) Then

' Set the custom cursor based upon the effect.
e.UseDefaultCursors = False
If ((e.Effect And DragDropEffects.Move) = DragDropEffects.Move) Then
Cursor.Current = MyNormalCursor
Else
Cursor.Current = MyNoDropCursor
End If
End If

End Sub

Private Sub ListDragTarget_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragOver
' Determine whether string data exists in the drop data. If not, then
' the drop effect reflects that the drop cannot occur.
If Not (e.Data.GetDataPresent(GetType(System.String))) Then

e.Effect = DragDropEffects.None
DropLocationLabel.Text = "None - no string data."
Return
End If

' Set the effect based upon the KeyState.
If ((e.KeyState And (8 + 32)) = (8 + 32) And _
(e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then
' KeyState 8 + 32 = CTL + ALT

' Link drag and drop effect.
e.Effect = DragDropEffects.Link

ElseIf ((e.KeyState And 32) = 32 And _
(e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then

' ALT KeyState for link.
e.Effect = DragDropEffects.Link

ElseIf ((e.KeyState And 4) = 4 And _
(e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

' SHIFT KeyState for move.
e.Effect = DragDropEffects.Move

ElseIf ((e.KeyState And 8) = 8 And _
(e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then

' CTL KeyState for copy.
e.Effect = DragDropEffects.Copy

ElseIf ((e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

' By default, the drop action should be move, if allowed.
e.Effect = DragDropEffects.Move

Else
e.Effect = DragDropEffects.None
End If

' Gets the index of the item the mouse is below.

' The mouse locations are relative to the screen, so they must be
' converted to client coordinates.

indexOfItemUnderMouseToDrop = _
ListDragTarget.IndexFromPoint(ListDragTarget.Point ToClient(New Point(e.X, e.Y)))

' Updates the label text.
If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then

DropLocationLabel.Text = "Drops before item #" & (indexOfItemUnderMouseToDrop + 1)
Else
DropLocationLabel.Text = "Drops at the end."
End If

End Sub