1

DataGridViewFilterSortElementと呼ばれる複数のUserControlを含むことができるFlowPanelLayoutがあります。これらのコントロールはボタンのように見えますが、異なります。ユーザーがDataGridViewFilterSortElementコントロールの1つをクリックして、FlowLayoutPanelの別の位置(インデックス)にドラッグできるようにしたいと思います。

ユーザーがコントロールを別の位置にドラッグしたときに、コントロールが物理的に移動するのを確認する方法はありますか?言い換えると、(影付きのボックスではなく)ドラッグされているコントロールの「スナップショット」を取得して、カーソルの移動に合わせて実際のコントロールが移動していることを示す方法はありますか?また、コントロールがドラッグされているときに、ユーザーがドラッグをドロップしてシフトを確認するのを待つのではなく、他のコントロールの位置を自動的にシフトさせたいと思います。

たとえば、FlowPanelLayoutに3つのコントロールが含まれていて、ユーザーが最初のコントロールを3番目のコントロールの位置にドラッグしたいとします。したがって、ユーザーは最初のDataGridViewFilterSortElementをクリックして押したままにし、2番目のコントロールをドラッグして2番目のコントロールを3の位置1にシフトし、次にユーザーが3番目のコントロールをドラッグして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
4

1 に答える 1

1

このページでは、やりたいことを実行する方法を説明します。試してみましたが、かなり良さそうです。 http://www.vbdotnetforums.com/gui/45818-flowlayoutpanel-repositioning-object.html

于 2012-08-06T21:05:42.453 に答える