0
私はドラッグアンドドロップで、私のVBAフォームのリストビューでソートを実装しようとしています。私はVBフォームのための多くのソリューションを見つけました。しかし、彼らはvbaで動作しません。私はvbaの記事も見つけました。しかし問題は、アイテムをドラッグすると、マウスオーバー時にカーソルが他のアイテムを強調表示しないということです。最後の行の下に項目をドラッグすると、最初の行だけが強調表示されます。説明のためにここには2 screenshotsがあります。ユーザーフォームのためのVBA - ドラッグ&ドロップによる並べ替えの並べ替え
Public Sub LVDragDropSingle(ByRef lvList As ListView, ByVal x As Single,
ByVal y As Single)
'Item being dropped
Dim objDrag As ListItem
'Item being dropped on
Dim objDrop As ListItem
'Item being readded to the list
Dim objNew As ListItem
'Subitem reference in dropped item
Dim objSub As ListSubItem
'Drop position
Dim intIndex As Integer
'Retrieve the original items
Set objDrop = lvList.HitTest(x, y)
Set objDrag = lvList.SelectedItem
If (objDrop Is Nothing) Or (objDrag Is Nothing) Then
Set lvList.DropHighlight = Nothing
Set objDrop = Nothing
Set objDrag = Nothing
Exit Sub
End If
'Retrieve the drop position
intIndex = objDrop.Index
'Remove the dragged item
lvList.ListItems.Remove objDrag.Index
'Add it back into the dropped position
Set objNew = lvList.ListItems.Add(intIndex, objDrag.key, objDrag.Text, objDrag.Icon, objDrag.SmallIcon)
'Copy the original subitems to the new item
If objDrag.ListSubItems.Count > 0 Then
For Each objSub In objDrag.ListSubItems
objNew.ListSubItems.Add objSub.Index, objSub.key, objSub.Text, objSub.ReportIcon, objSub.ToolTipText
Next
End If
'Reselect the item
objNew.Selected = True
'Destroy all objects
Set objNew = Nothing
Set objDrag = Nothing
Set objDrop = Nothing
Set lvList.DropHighlight = Nothing
End Sub
と2潜水艦:私が見つけ
Private Sub ListView1_OLEDragOver(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)
Set ListView1.DropHighlight = ListView1.HitTest(x, y)
End Sub
Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Call LVDragDropSingle(ListView1, x, y)
End Sub
この記事では、いくつかの説明があり、ここにコードがあります。私は複数のリンクを投稿することが許可されていないので、リンクを投稿できません。