Làm cách nào để thực hiện thao tác kéo và thả tệp vào ứng dụng khác (giống như khi tôi đang kéo từ trình khám phá tệp)

lập trình


CHÀO,
Tôi muốn sao chép thao tác kéo và thả từ tệp Explorer nhưng từ ứng dụng của tôi sẽ là mục lislview.

I E
Kéo mục listview (Đường dẫn tệp) sang ứng dụng khác giống như trình thám hiểm sẽ hoạt động.

Dường như có rất nhiều ví dụ kéo vào một ứng dụng nhưng rất ít ví dụ kéo sang ứng dụng khác.

Cảm ơn trước

Những gì tôi đã thử:

Tôi đã thử cách này khi di chuột xuống nhưng không phải là cách tiếp cận chính xác

DataObject Data = New DataObject(DataFormats.FileDrop, files)
DragDrop.DoDragDrop(listTest, Data, DragDropEffects.Copy)

Tôi thậm chí đã nghĩ đến việc sử dụng clipboard nhưng một lần nữa tôi không nghĩ đó là cách tiếp cận chính xác.

Đã sắp xếp (Chỉ khi có ai khác đang gặp khó khăn.

<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

Cảm ơn bạn đã thiết lập con đường chính xác cho tôi.

Giải pháp 1

Khi bạn kéo và thả từ trình khám phá vào một ứng dụng, người nhận cần thực hiện một số việc:
1) Xử lý sự kiện DragEnter Đặt e.Effect thành DragDropEffect.Copy hoặc DragDropEffects.Move
2) Xử lý Sự kiện DragDrop và tìm nạp danh sách tệp bằng cách gọi e.Data.GetData và chuyển cho nó giá trị DataFormts.FileDrop. Điều này trả về một Đối tượng mà nếu có tệp sẽ là một chuỗi các chuỗi – một chuỗi trên mỗi tệp và chứa đường dẫn đầy đủ đến tệp.

Vì vậy, để kéo ứng dụng của bạn theo định dạng mà hệ thống khác có thể xử lý khá đơn giản: xây dựng một mảng đường dẫn và gọi phương thức DoDragDrop cho Biểu mẫu của bạn (hoặc điều khiển khác) truyền mảng đó và DragDropEffects.Copy Ored bằng DragDropEffects.Move as tham số thứ hai.

Bạn cũng có thể muốn xem Sự kiện Control.QueryContinueDrag (System.Windows.Forms) | Microsoft Tìm hiểu[^] nhưng nếu bạn đang sử dụng “bất kỳ ứng dụng nào” thì bạn không cần đến nó.

コメント

タイトルとURLをコピーしました