Comment faire glisser un fichier vers une autre application (comme si je le faisais glisser depuis l’explorateur de fichiers)

la programmation


Salut,
Je veux répliquer le glisser-déposer depuis l’explorateur de fichiers mais depuis mon application qui sera un élément lislview.

c’est à dire
Faites glisser l’élément de liste (chemin du fichier) vers une autre application de la même manière que l’explorateur fonctionnerait.

Il semble y avoir beaucoup d’exemples à glisser vers une application mais très peu vers une autre.

Merci d’avance

Ce que j’ai essayé :

J’ai essayé cela avec la souris mais ce n’est pas la bonne approche

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

J’ai même pensé à opter pour le presse-papiers mais encore une fois, je ne pense pas que ce soit la bonne approche.

Trié (juste si quelqu’un d’autre a du mal.

<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

Merci de m’avoir tracé le bon chemin.

Solution 1

Lorsque vous faites un glisser-déposer depuis l’explorateur vers une application, le récepteur doit effectuer plusieurs opérations :
1) Gérer l’événement DragEnter Définissez e.Effect sur DragDropEffect.Copy ou DragDropEffects.Move
2) Gérez l’événement DragDrop et récupérez la liste des fichiers en appelant e.Data.GetData et en lui transmettant la valeur DataFormts.FileDrop. Cela renvoie un objet qui, s’il existe des fichiers, sera un tableau de chaînes – une chaîne par fichier et contenant le chemin complet du fichier.

Donc, faire glisser votre application dans un format que l’autre système peut traiter est assez simple : créez un tableau de chemins et appelez la méthode DoDragDrop pour votre formulaire (ou un autre contrôle) en passant le tableau et DragDropEffects.Copy Ored avec DragDropEffects.Move as le deuxième paramètre.

Vous voudrez peut-être également consulter le Événement Control.QueryContinueDrag (System.Windows.Forms) | Microsoft Apprendre[^] mais si vous utilisez “n’importe quelle application”, vous ne devriez pas en avoir besoin.

コメント

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