У меня есть FlowPanelLayout, который может содержать несколько пользовательских элементов управления, называемых DataGridViewFilterSortElement. Эти элементы управления выглядят как кнопки, но отличаются. Я хочу, чтобы пользователь мог щелкнуть один из элементов управления DataGridViewFilterSortElement и перетащить его в другую позицию (индекс) в FlowLayoutPanel.
Есть ли способ увидеть, как элемент управления физически перемещается, когда пользователь перетаскивает его в другое место? Другими словами, есть ли способ сделать «моментальный снимок» перетаскиваемого элемента управления (вместо затененного прямоугольника), который показал бы фактическое перемещение элемента управления при перемещении курсора? Кроме того, поскольку элемент управления перетаскивается, я хотел бы, чтобы другие элементы управления автоматически смещались, вместо того, чтобы ждать, пока пользователь отпустит перетаскивание, чтобы увидеть сдвиги.
Например, предположим, что FlowPanelLayout содержит 3 элемента управления, и пользователь хочет перетащить первый элемент управления на позицию третьего элемента управления. Таким образом, пользователь щелкает и удерживает первый элемент DataGridViewFilterSortElement, затем перетаскивает второй элемент управления, что приводит к смещению второго элемента управления в положение 1 из 3, затем пользователь перетаскивает третий элемент управления, в результате чего третий элемент управления смещается в положение 2 из 3, то пользователь опускает регулятор в положение 3. Возможно ли это? Небольшой код, который у меня есть, приведен ниже.
Вот короткое видео, в котором показано, что я хочу сделать: http://www.youtube.com/watch?v=YhyTni6KH0Q
Private Sub lblDescription_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, lblDescription.MouseDown
' if the user left clicks and holds the element begin a DragDrop action
If e.Button = Windows.Forms.MouseButtons.Left Then
Me.DoDragDrop(Me, DragDropEffects.Move)
End If
End Sub
Private Sub SortFlowLayoutPanel_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragOver
e.Effect = DragDropEffects.Move
End Sub
Private Sub SortFlowLayoutPanel_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles SortFlowLayoutPanel.DragDrop
If e.Data.GetData(GetType(DataGridViewFilterSortElement)) IsNot Nothing Then
'Current Position
Dim myIndex As Integer = Me.SortFlowLayoutPanel.Controls.GetChildIndex(CType(e.Data.GetData(GetType(DataGridViewFilterSortElement)), DataGridViewFilterSortElement))
'Dragged to control to location of next picturebox
Dim element As DataGridViewFilterSortElement = CType(e.Data.GetData(GetType(DataGridViewFilterSortElement)), DataGridViewFilterSortElement)
Me.SortFlowLayoutPanel.Controls.SetChildIndex(element, myIndex)
End If
End Sub
Private Sub SortFlowLayoutPanel_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles SortFlowLayoutPanel.DragOver
e.Effect = DragDropEffects.Move
End Sub