2012-02-27 14 views
16

मैं एक फ़ाइल खींच और छोड़ना चाहता हूं ताकि टेक्स्टबॉक्स पूर्ण फ़ाइल पथ दिखा सके। मैंने ड्रैग एंटर और ड्रैग ड्रॉप इवेंट्स का उपयोग किया है, लेकिन मुझे लगता है कि वे ईवेंट में प्रवेश नहीं कर रहे हैं।टेक्स्टबॉक्स में फ़ाइल खींचें और छोड़ें

private void sslCertField_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) 
    { 
     e.Effect = DragDropEffects.All; 
    } 
} 

private void sslCertField_DragEnter(object sender, DragEventArgs e) 
{ 
    string file = (string)e.Data.GetData(DataFormats.FileDrop); 
    serverURLField.Text = file; 
} 

क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं?

अद्यतन: कार्यक्रम ऊंचा अनुमति के साथ चलाने के लिए सेट है, तो काम नहीं करता (विस्टा/जीत 7)

+0

क्या आप हमें कुछ मार्कअप दिखा सकते हैं? – gaurawerma

उत्तर

17

अपने पाठ बॉक्स के संपत्ति की जाँच करें - यह true सेट किया जाना चाहिए। इसके अलावा, DataFormats.FileDrop के मामले में string[] के लिए ड्रैग-बूंद डेटा कनवर्ट करते हैं, न सिर्फ string:

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 
if(files != null && files.Length != 0) 
{ 
    serverURLField.Text = files[0]; 
} 

और मुझे लगता है आप अपनी खींचें ईवेंट हैंडलर्स में कोड स्वैप चाहिए - आम तौर पर आप उपयोगकर्ता कि खींचें ड्रॉप में संभव है दिखाने DragEnter और DragDrop पर वास्तविक संचालन करें।

+0

मैंने जो कुछ भी कहा है मैंने किया है। मैंने स्वीड्रॉप को सही करने के लिए बदल दिया, और विधियों की सामग्री को बदल दिया और स्ट्रिंग [] में इसे बदल दिया। हालांकि, घटनाएं अभी भी सक्रिय नहीं हैं। यह फॉर्म एक मूल रूप का हिस्सा है। क्या इससे प्रभावित होगा? हालांकि, यह टेक्स्ट बॉक्स माता-पिता के नियंत्रण का हिस्सा नहीं है – michelle

+2

वास्तव में जब मैं फ़ाइल खींचने का प्रयास करता हूं, तो मुझे अस्वीकार आइकन – michelle

+1

मिलता है क्या आपका एप्लिकेशन Win7/Vista पर उन्नत (व्यवस्थापक) विशेषाधिकारों के तहत चल रहा है? एक्सप्लोरर से ड्रैग-ड्रॉप इस मामले में काम नहीं करेगा। – max

4

न दृश्य स्टूडियो से चलाने ... .exe जो एक बार आप अपने समाधान का निर्माण बनाई गई है चलाने .. आशा में मदद करता है :)

+1

क्या विजुअल स्टूडियो में प्रोजेक्ट चलाने से कोई फर्क पड़ता है? वास्तव में ? क्या विजुअल स्टूडियो ड्रैग-ड्रॉप कार्यक्षमता को अक्षम करना चाहता है? – PurpleXenon

+0

हाँ किसी भी तरह से यह डीबग से काम नहीं करता है लेकिन यह सीधे काम करता है – PersyJack

+0

मैं इसे नियंत्रित करने की कोशिश कर 3 बार अपने नियंत्रण को फिर से लिखता हूं ... :(धन्यवाद। – Jeff

8

ऊंचा विशेषाधिकारों यह से कोई लेना देना नहीं होना चाहिए। मैक्स ने उत्तर दिया कि DragDrop के अतिरिक्त आपको DragOver ईवेंट को भी लागू करने की आवश्यकता है। इस कोड है कि DragDrop के लिए जोड़ा जाना चाहिए है:

private void textBoxFile_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }

+3

विंडोज फॉर्म अनुप्रयोगों में, इसे काम करने के लिए निम्नलिखित करने की आवश्यकता है : 1) 'TextBox.AllowDrop = true' सेट करें; 2) अधिकतम टेक्स्ट का उपयोग करके 'TextBox.DragDrop()' ईवेंट को संभाल लें 3) ऊपर दिए गए जोओओ कोड का उपयोग करके 'TextBox.DragOver()' ईवेंट को भी संभाल लें। जब सभी 3 स्थितियों को पूरा किया जाता है तो इसे काम करना चाहिए। मेरे मामले में "उन्नत प्राइवेट" की आवश्यकता नहीं थी, लेकिन अगर आप पाते हैं कि यह आपके लिए एक समस्या है तो आप हमेशा अपने विजुअल स्टूडियो शॉर्टकट को "व्यवस्थापक के रूप में चलाएं" में बदल सकते हैं। –

4

आप WPF का उपयोग कर रहे हैं और यह अभी भी जवाब यहां साथ काम नहीं करता है (जो मेरे मामले था), तो आपको

उपयोग करने के लिए की जरूरत है
e.Handled = true; 
PreviewDragEnter घटना में

, here वर्णित के रूप में और here (वे एक ही लेख कर रहे हैं, लेकिन सिर्फ मामले में एक नीचे चला जाता है)। अपने दृश्य स्टूडियो व्यवस्थापक अधिकार खींचें के तहत चल रहा है और ड्रॉप कार्यक्षमता है, तो

private void TextBox_PreviewDragEnter(object sender, DragEventArgs e) 
{ 
    e.Effects = DragDropEffects.Copy; 
    e.Handled = true; 
} 

private void TextBox_PreviewDrop(object sender, DragEventArgs e) 
{ 
    object text = e.Data.GetData(DataFormats.FileDrop); 
    TextBox tb = sender as TextBox; 
    if (tb != null) 
    { 
     tb.Text = string.Format("{0}", ((string[])text)[0]); 
    } 
} 
+0

यह पूर्वावलोकन ड्रैग नहीं होना चाहिए, यह * पूर्वावलोकनDragOver * होना चाहिए। उस घटना का उपयोग टेक्स्टबॉक्स के लिए मेरे लिए काम किया। –

1

काम करने के लिए नहीं लगता है:

यहाँ, कोड स्निपेट है कि स्रोत से।

=> व्यवस्थापक अधिकारों के बिना दृश्य स्टूडियो चलाएं और यह

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