किसी फ़ाइल को किसी अन्य एप्लिकेशन पर खींचने और छोड़ने की कार्रवाई कैसे होती है (जैसे कि मैं फ़ाइल एक्सप्लोरर से खींच रहा था)


नमस्ते,
मैं फ़ाइल एक्सप्लोरर से ड्रैग एंड ड्रॉप को दोहराना चाहता हूं लेकिन अपने एप्लिकेशन से जो लिसलव्यू आइटम होगा।

अर्थात
सूचीदृश्य आइटम (फ़ाइल पथ) को अन्य एप्लिकेशन पर खींचें, जैसे एक्सप्लोरर काम करेगा।

ऐसा प्रतीत होता है कि किसी एप्लिकेशन में खींचने के बहुत सारे उदाहरण हैं लेकिन दूसरे में बहुत कम।

अग्रिम में धन्यवाद

मैंने क्या प्रयास किया है:

मैंने इसे माउस डाउन में आज़माया है लेकिन यह सही तरीका नहीं है

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) ड्रैगड्रॉप इवेंट को संभालें और e.Data.GetData को कॉल करके और इसे DataFormts.FileDrop मान पास करके फ़ाइलों की सूची प्राप्त करें। यह एक ऑब्जेक्ट लौटाता है जिसमें यदि फ़ाइलें हैं तो स्ट्रिंग्स की एक सरणी होगी – प्रति फ़ाइल एक स्ट्रिंग और फ़ाइल का पूरा पथ शामिल होगा।

इसलिए आपके ऐप को एक ऐसे प्रारूप में खींचना जिसे अन्य सिस्टम प्रक्रिया कर सकता है, बहुत सरल है: पथों की एक सरणी बनाएं और अपने फॉर्म (या किसी अन्य नियंत्रण) के लिए DoDragDrop विधि को कॉल करें और सरणी और DragDropEffects को पास करें। DragDropEffects के साथ Ored को कॉपी करें। इस रूप में आगे बढ़ें दूसरा पैरामीटर.

आप भी देखना चाह सकते हैं कंट्रोल.क्वेरीकंटिन्यूड्रैग इवेंट (सिस्टम.विंडोज.फॉर्म) | माइक्रोसॉफ्ट लर्न[^] लेकिन यदि आप “किसी एप्लिकेशन” को छोड़ रहे हैं तो आपको इसकी आवश्यकता नहीं होनी चाहिए।

コメント

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