2012-02-27 18 views
16

Chcę przeciągnąć i upuścić plik, aby pole tekstowe zawierało pełną ścieżkę do pliku. Użyłem zdarzeń przeciągnij i przeciągnij, ale stwierdzam, że nie wchodzą one w wydarzenia.przeciągnij i upuść plik do pola tekstowego

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; 
} 

Czy ktoś może wskazać, co robię źle?

UPDATE: nie działa, jeśli program jest ustawiony do pracy z podwyższonymi uprawnieniami (Vista/Win 7)

+0

można pokazać nam niektóre znaczniki? – gaurawerma

Odpowiedz

17

sprawdzić właściwość swojego tekstowym - powinien być ustawiony na true. również konwertować dane przeciągnij-upuść do string[] w przypadku DataFormats.FileDrop, nie tylko string:

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

I myślę, że należy zamienić kod w swoim obsługi zdarzeń drag - zazwyczaj pokazać użytkownikowi, że drag-drop jest możliwe DragEnter i wykonaj rzeczywistą operację na DragDrop.

+0

Zrobiłem wszystko, co powiedziałeś. Zmieniłem allowdrop na true i zmieniłem zawartość metod, a także zmieniłem je na string []. jednak zdarzenia nadal nie są aktywowane. ta forma jest częścią formy nadrzędnej. czy to wpłynie na to? Jednak to pole tekstowe nie jest częścią kontroli rodzica – michelle

+2

w rzeczywistości, gdy próbuję przeciągnąć plik, otrzymuję ikonę odmowy – michelle

+1

Czy twoja aplikacja działa pod podniesionymi uprawnieniami (administratora) na Win7/Vista? Drag-drop from explorer nie zadziała w tym przypadku. – max

4

nie uruchomić go z visual studio ... uruchomić plik .exe, który jest tworzony po zbudować rozwiązanie .. nadzieję, że pomoże :)

+1

Czy uruchomienie projektu w Visual Studio robi różnicę? Naprawdę? Czy Visual Studio ma wyłączać funkcję przeciągania i upuszczania? – PurpleXenon

+0

Tak jakoś to nie działało z debugowania, ale działało bezpośrednio – PersyJack

+0

Przepisałem kontrolkę 3 razy próbując to zrozumieć ... :(Dzięki. – Jeff

8

podwyższonymi uprawnieniami nie powinien mieć nic wspólnego z nim. Musisz także zaimplementować zdarzenie DragOver oprócz odpowiedzi na pytanie, które Max odpowiedział. Jest to kod, który należy dodać do 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

W aplikacjach Windows Form, należy wykonać następujące czynności, aby go uruchomić : 1) Ustaw 'TextBox.AllowDrop = true;' 2) Obsługuj zdarzenie 'TextBox.DragDrop()' używając kodu max 3). Zajmij się również zdarzeniem 'TextBox.DragOver()' używając kodu Joao powyżej. Kiedy wszystkie 3 warunki zostaną spełnione, powinno działać. W moim przypadku nie było wymagane "podwyższenie liczby punktów startowych", ale zawsze możesz zmienić skrót Visual Studio na "Uruchom jako Administrator", jeśli odkryjesz, że jest to problem dla Ciebie. –

4

Jeśli używasz WPF i nadal nie działa tutaj odpowiedzi (co było moim przypadku), trzeba użyć

e.Handled = true; 

w przypadku PreviewDragEnter, jak opisano here i here (oni ten sam artykuł, ale tylko w przypadku, gdy jeden idzie w dół).

Oto fragment kodu, z tego źródła:

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

To nie powinno być PreviewDragEnter, powinno być * PreviewDragOver *. Korzystanie z tego zdarzenia zadziałało dla mnie w TextBox. –

1

Jeśli Visual Studio działa pod Drag prawami administratora i upuść wydaje się nie działać.

=> Uruchom visual studio bez praw administratora i będzie działać

Powiązane problemy