[ad_1]
Hola,
Quiero replicar el proceso de arrastrar y soltar desde el explorador de archivos pero desde mi aplicación, que será el elemento lislview.
es decir
Arrastre el elemento de la vista de lista (ruta del archivo) a otra aplicación de la misma manera que funcionaría el explorador.
Parece que hay muchos ejemplos que se arrastran a una aplicación, pero muy pocos a otra.
gracias de antemano
Lo que he probado:
He probado esto con el mouse hacia abajo pero no es el enfoque correcto.
DataObject Data = New DataObject(DataFormats.FileDrop, files) DragDrop.DoDragDrop(listTest, Data, DragDropEffects.Copy)
Incluso he pensado en utilizar el portapapeles, pero nuevamente no creo que sea el enfoque correcto.
Ordenado (Solo si alguien más tiene dificultades.
<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
Gracias por guiarme por el camino correcto.
Solución 1
Cuando arrastras y sueltas desde el explorador a una aplicación, el receptor necesita hacer un par de cosas:
1) Manejar el evento DragEnter Establezca e.Effect en DragDropEffect.Copy o DragDropEffects.Move
2) Maneje el evento DragDrop y obtenga la lista de archivos llamando a e.Data.GetData y pasándole el valor DataFormts.FileDrop. Esto devuelve un Objeto que, si hay archivos, será una matriz de cadenas: una cadena por archivo y que contiene la ruta completa al archivo.
Entonces, arrastrar fuera de su aplicación en un formato que el otro sistema pueda procesar es bastante simple: cree una matriz de rutas y llame al método DoDragDrop para su formulario (u otro control) pasando la matriz y DragDropEffects.Copy Ored con DragDropEffects.Move as el segundo parámetro.
Quizás también quieras mirar el Evento Control.QueryContinueDrag (System.Windows.Forms) | Microsoft aprende[^] pero si opta por “cualquier aplicación”, entonces no debería necesitarla.
[ad_2]
コメント