2010-10-15 5 views
7

क्या मैं क्लिपबोर्ड में 1 से अधिक प्रकार स्टोर कर सकता हूं? उदाहरण के लिए। पाठ & छवि की तरह। कहें कि उपयोगकर्ता एक टेक्स्ट एडिटर में पेस्ट करता है, उसे टेक्स्ट मिलता है और अगर वह फ़ोटोशॉप की तरह कुछ चिपक जाता है, तो उसे छवि मिलती है। मैंने सोचा कि यह संभव हो गया था, लेकिन मैंसी #/डब्ल्यूपीएफ: क्या मैं क्लिपबोर्ड में 1 प्रकार से अधिक स्टोर कर सकता हूं?

Clipboard.Clear(); 
Clipboard.SetText(img.DirectLink); 

BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.UriSource = new Uri(img.DirectLink); 
bitmapImage.EndInit(); 

Clipboard.SetImage(bitmapImage); 

की कोशिश की और मैं हमेशा छवि

+0

खैर, AFAIK वहाँ क्लिपबोर्ड में केवल एक स्लॉट है, जब से तुम छवि पिछले शब्दों में कहें, कि उम्मीद की जा करने के लिए होगा ... – flq

उत्तर

11

हाँ, यह संभव है मिलता है। मुख्य समस्या यह है कि, डेटा डालने से पहले आप स्पष्ट क्लिपबोर्ड का उपयोग कर रहे हैं (यही कारण है कि विशेष रूप से उन्होंने "जोड़ें ..." के बजाय "सेट ..." नाम दिया है)। MSDN से

Clipboard.SetText (WinForms)/Clipboard.SetText (WPF) विवरण:

(WinForms): क्लिपबोर्ड साफ़ करता है और फिर पाठ या UnicodeText प्रारूप में पाठ डेटा कहते हैं, ऑपरेटिंग सिस्टम के आधार।

लेकिन एक समाधान अपेक्षाकृत आसान है:

एकाधिक प्रारूपों में क्लिपबोर्ड पर डेटा जगह, DataObject वर्ग या एक IDataObject कार्यान्वयन का उपयोग करें। क्लिपबोर्ड पर डेटा को कई प्रारूपों में रखें ताकि लक्ष्य को लक्षित किया जा सके, जिसकी प्रारूप आवश्यकताएं जिन्हें आप नहीं जानते हैं, डेटा को सफलतापूर्वक पुनर्प्राप्त कर सकते हैं। जानकारी के लिए

चेक MSDN:


अद्यतन:

WPF संस्करणों के लिए लिंक जोड़ा गया।

@ ब्योर्न टिप्पणी को स्पष्ट करने के लिए:

System.Windows.Clipboard.SetText के लिए MSDN पेज() नहीं बताता है कि क्लिपबोर्ड को मंजूरी दे दी है, कि भले ही मामले

हो रहा है

दोनों विधियां (डब्ल्यूपीएफ/विनफॉर्म) आंतरिक रूप से OleSetClipboard पर कॉल करती हैं, इसलिए व्यवहार समान है (आप http://referencesource.microsoft.com/#q=Clipboard.SetText देख सकते हैं)।

मैंने कंसोल ऐप में दोनों प्रकार (WinForms/WPF) की भी जांच की और पाया कि वे वही करते हैं।

+0

क्षमा करें मुझे पार्टी के लिए देर हो चुकी है; मैं हाल ही में क्लिपबोर्ड पर एक तस्वीर और कुछ पाठ प्राप्त करने की कोशिश कर रहा था और यह काम नहीं कर रहा था। मेरे कोड इस तरह देखा: 'dataObject.SetText (" leText ");' ' dataObject.SetImage (myImage);' ' Clipboard.SetDataObject (dataObject);' आदेश यह काम करने के लिए मैं जोड़ा एक SetDataObject विधि के लिए अतिरिक्त बूलियन "सत्य": 'क्लिपबोर्ड.SetDataObject (डेटाऑब्जेक्ट, सत्य);' उत्तर [यहां] देखें (http://stackoverflow.com/questions/9032673/clipboard-copying-objects -to-and-from) –

+0

एमएसडीएन का लिंक वास्तव में System.Windows.Forms.Clipboard के लिए है, सिस्टम नहीं। Windows.Clipboard (जो WPF का उपयोग करना चाहिए)। System.Windows.Clipboard.SetText() के लिए एमएसडीएन पृष्ठ यह नहीं बताता है कि क्लिपबोर्ड साफ़ हो गया है, भले ही ऐसा लगता है। –

4

जैसा निक ने स्वीकार किए गए उत्तर में कहा है: आपको एकाधिक प्रारूपों का उपयोग करने के लिए डेटाऑब्जेक्ट (या IDataObject) का उपयोग करना होगा (अन्यथा प्रत्येक सेट-कॉल पहले क्लिपबोर्ड को साफ़ करेगा)।
यहाँ एक कोड नमूना है:

BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.UriSource = new Uri(img.DirectLink); 
bitmapImage.EndInit(); 

DataObject d = new DataObject(); 
d.SetImage(bitmapImage); 
d.SetText(img.DirectLink); 
Clipboard.SetDataObject(d); 
संबंधित मुद्दे

 संबंधित मुद्दे