2008-10-17 3 views
20

में क्लिपबोर्ड पर फ़ाइलों की प्रतिलिपि बनाएँ मेरे पास Windows FormsTreeView (नोड, सबनोड्स) है। प्रत्येक नोड में इसके टैग में कुछ अतिरिक्त जानकारी होती है। साथ ही, प्रत्येक नोड डिस्क पर एक फ़ाइल को मैप करता है। C# में कॉपी/कट/पेस्ट नोड्स/फ़ाइलों का सबसे आसान तरीका क्या है?सी #

कुछ नमूना कोड होना अच्छा लगेगा।

+0

कुछ इस –

उत्तर

34

Clipboard class का उपयोग करने पर विचार करें। इसमें विंडोज क्लिपबोर्ड पर डेटा डालने और विंडोज क्लिपबोर्ड से डेटा पुनर्प्राप्त करने के लिए आवश्यक सभी विधियां हैं।

StringCollection paths = new StringCollection(); 
paths.Add("f:\\temp\\test.txt"); 
paths.Add("f:\\temp\\test2.txt"); 
Clipboard.SetFileDropList(paths); 

उपरोक्त कोड Windows क्लिपबोर्ड पर प्रतिलिपि के लिए test.txt और test2.txt फ़ाइलों को रखेगा। कोड निष्पादित करने के बाद आप फ़ाइलों को किसी भी फ़ोल्डर और पेस्ट (Ctrl + V) पर नेविगेट कर सकते हैं। यह विंडोज एक्सप्लोरर में दोनों फाइलों का चयन करने और कॉपी (Ctrl + C) चुनने के बराबर है।

+1

क्लिपबोर्ड की तरह केवल एक प्लेसहोल्डर है। जब क्लिपबोर्ड पर डेटा स्थानांतरित किया जाता है तो इस बारे में कोई जानकारी नहीं है कि यह एक प्रति या कट ऑपरेशन है या नहीं। सहेजे गए राज्य के आधार पर दूसरे से अलग करने के लिए कॉलिंग ऑपरेशन की ज़िम्मेदारी है। –

+1

उदाहरण के लिए जब आप वर्ड पर कटौती करते हैं तो पाठ काटा गया दस्तावेज़ तुरंत हटा दिया जाता है। कटा हुआ पाठ विंडोज क्लिपबोर्ड पर रखा गया है और फिर मांग पर चिपकाया जा सकता है। –

5

यदि आप केवल अपने आवेदन के भीतर प्रतिलिपि बना रहे हैं और पेस्ट कर रहे हैं, तो आप अपने ट्रीव्यूव के कट/कॉपी ऑपरेशन को उस विधि पर मैप कर सकते हैं जो आपके चुने हुए नोड को क्लोन करता है। Ie:

TreeNode selectedNode; 
TreeNode copiedNode; 

selectedNode = yourTreeview.SelectedNode; 

if (selectedNode != null) 
{ 
    copiedNode = selectedNode.Clone; 
} 

// Then you can do whatever you like with copiedNode elsewhere in your app. 

यदि आप अन्य अनुप्रयोगों में पेस्ट करने में सक्षम होना चाहते हैं, तो आपको क्लिपबोर्ड का उपयोग करना होगा। IDataObject इंटरफ़ेस के बारे में अधिक जानने के द्वारा आप केवल सादा पाठ की तुलना में थोड़ा फैनसीयर प्राप्त कर सकते हैं। मैं स्रोत याद नहीं कर सकते लेकिन यहाँ कुछ मैं अपने खुद के नोट्स में पड़ा है:

जब एक कक्षा में लागू किया, IDataObject तरीकों वर्ग का उदाहरण में एकाधिक प्रारूपों में दुकान डेटा पर उपयोगकर्ता की अनुमति देने के । में डेटा संग्रहीत करने से एक से अधिक प्रारूप बढ़ते हैं कि एक लक्षित एप्लिकेशन, जिनकी प्रारूप आवश्यकताएं आप नहीं जानते हैं, संग्रहीत डेटा पुनर्प्राप्त कर सकते हैं। IDataObject के उदाहरण में डेटा स्टोर करने के लिए, SetData विधि पर कॉल करें और प्रारूप पैरामीटर में डेटा प्रारूप निर्दिष्ट करें। अगर आप संग्रहित डेटा को प्रारूप में पुनर्प्राप्त करने के लिए परिवर्तित नहीं करना चाहते हैं तो ऑटोकॉन्टर पैरामीटर को गलत पर सेट करें। एक प्रारूप से अधिक में डेटा स्टोर करने के लिए IDataObject के एक उदाहरण पर SetData कई बार आमंत्रित करें।

एक बार जब आप एक वस्तु है कि IDataObject (जैसे कुछ yourTreeNodeDataObject कहा जाता है) को लागू करता है आबादी है, तो आप कॉल कर सकते हैं:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);