【解決方法】ファイルを別のアプリケーションにドラッグ&ドロップする方法(ファイルエクスプローラーからドラッグしているのと同じ)

[ad_1]

こんにちは、
ファイルエクスプローラーからではなく、lislviewアイテムとなる私のアプリケーションからドラッグアンドドロップを複製したいと考えています。

つまり
エクスプローラーと同じように、リストビュー項目 (ファイル パス) を他のアプリケーションにドラッグします。

アプリケーションにドラッグする例はたくさんあるようですが、別のアプリケーションにドラッグする例はほとんどありません。

前もって感謝します

私が試したこと:

マウスダウンでこれを試しましたが、正しいアプローチではありませんでした

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 値を渡すことによってファイルのリストを取得します。 これは、ファイルがある場合は文字列の配列となるオブジェクトを返します。ファイルごとに 1 つの文字列であり、ファイルへの完全なパスが含まれます。

したがって、他のシステムが処理できる形式でアプリからドラッグするのは非常に簡単です。パスの配列を構築し、Form (または別のコントロール) の DoDragDrop メソッドを呼び出し、その配列と DragDropEffects.Copy Ored with DragDropEffects.Move as を渡します。 2 番目のパラメータ。

こちらもご覧ください。 Control.QueryContinueDrag イベント (System.Windows.Forms) Microsoft Learn[^] ただし、「任意のアプリケーション」にドロップする場合は、それは必要ありません。

[ad_2]

コメント

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