كيف أقوم بسحب ملف وإفلاته إلى تطبيق آخر (كما لو كنت أقوم بالسحب من مستكشف الملفات)


أهلاً،
أريد تكرار السحب والإفلات من مستكشف الملفات ولكن من تطبيقي الذي سيكون عنصر 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. يؤدي هذا إلى إرجاع كائن والذي إذا كانت هناك ملفات سيكون عبارة عن مجموعة من السلاسل – سلسلة واحدة لكل ملف وتحتوي على المسار الكامل للملف.

لذا، فإن السحب خارج تطبيقك بتنسيق يمكن للنظام الآخر معالجته أمر بسيط جدًا: أنشئ مصفوفة من المسارات واستدعِ الأسلوب DoDragDrop للنموذج (أو عنصر تحكم آخر) الخاص بك، وقم بتمرير المصفوفة وDragDropEffects.Copy Ored باستخدام DragDropEffects.Move as المعلمة الثانية.

قد ترغب أيضًا في إلقاء نظرة على حدث Control.QueryContinueDrag (System.Windows.Forms) | مايكروسوفت تعلم[^] ولكن إذا كنت ستسقط على “أي تطبيق” فلن تحتاج إليه.

コメント

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