[ad_1]
你好,
我想从文件资源管理器复制拖放操作,但从我的应用程序复制拖放操作,该应用程序将是 lislview 项目。
IE
将列表视图项目(文件路径)拖动到其他应用程序,就像资源管理器一样。
似乎有很多拖动到一个应用程序的示例,但很少有拖动到另一个应用程序的示例。
提前致谢
我尝试过的:
我已经在鼠标按下时尝试过此操作,但不是正确的方法
DataObject Data = New DataObject(DataFormats.FileDrop, files) DragDrop.DoDragDrop(listTest, Data, DragDropEffects.Copy)
我什至想过使用剪贴板,但我再次认为这不是正确的方法。
已排序(如果其他人正在挣扎。
<ListView x:Name="Lst_File_Viewer" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,3,5,3" SelectionMode="Single"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <EventSetter Event="MouseMove" Handler="Lst_File_Viewer_MouseMove" /> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView AllowsColumnReorder="False"> <GridViewColumn Header="File Name" Width="Auto" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Dir" Width="0" DisplayMemberBinding="{Binding Directory}" /> </GridView> </ListView.View> </ListView>
Private Sub Lst_File_Viewer_MouseMove(sender As Object, e As MouseEventArgs) If e.LeftButton = MouseButtonState.Pressed Then If e.Source IsNot Nothing Then Dim dataObject As DataObject ' = New DataObject(myList) Dim myList As StringCollection = New StringCollection For Each Item As File In Lst_File_Viewer.SelectedItems myList.Add(Item.Directory) Next dataObject = New DataObject() dataObject.SetFileDropList(myList) DragDrop.DoDragDrop(Lst_File_Viewer, dataObject, DragDropEffects.Copy) End If End If End Sub
感谢您为我设定了正确的路径。
解决方案1
当您从资源管理器拖放到应用程序中时,接收者需要执行以下操作:
1) 处理DragEnter事件 将e.Effect设置为DragDropEffect.Copy或DragDropEffects.Move
2) 处理 DragDrop 事件并通过调用 e.Data.GetData 并向其传递 DataFormts.FileDrop 值来获取文件列表。 这将返回一个对象,如果有文件,该对象将是一个字符串数组 – 每个文件一个字符串,并包含文件的完整路径。
因此,以其他系统可以处理的格式从应用程序中拖出非常简单:构建路径数组并为 Form(或其他控件)调用 DoDragDrop 方法,传递数组和 DragDropEffects.Copy Ored 与 DragDropEffects.Move 作为第二个参数。
您可能还想查看 Control.QueryContinueDrag 事件 (System.Windows.Forms) | Control.QueryContinueDrag 事件 (System.Windows.Forms) 微软学习[^] 但如果您选择“任何应用程序”,那么您就不需要它了。
[ad_2]
コメント