2012-02-27 42 views
16

Tôi muốn kéo và thả tệp để hộp văn bản hiển thị đường dẫn tệp đầy đủ. Tôi đã sử dụng kéo và kéo thả sự kiện nhưng tôi thấy rằng họ không nhập các sự kiện.kéo và thả tệp vào hộp văn bản

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

Bất kỳ ai có thể chỉ ra những gì tôi đang làm sai?

UPDATE: Không có tác dụng nếu chương trình được thiết lập để chạy với quyền truy cập cao (Vista/Win 7)

+0

bạn có thể hiển thị cho chúng tôi một số đánh dấu không? – gaurawerma

Trả lời

17

Kiểm tra tài sản của textbox của bạn - nó phải được thiết lập để true. Ngoài ra, chuyển đổi dữ liệu kéo-thả để string[] trong trường hợp DataFormats.FileDrop, không chỉ string:

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

Và tôi nghĩ bạn nên trao đổi mã trong xử lý sự kiện kéo của bạn - thường bạn hiển thị người dùng kéo thả là có thể trong DragEnter và thực hiện thao tác thực tế trên DragDrop.

+0

Tôi đã làm mọi thứ bạn nói. Tôi đã thay đổi allowdrop thành true và thay đổi nội dung của các phương thức cũng như thay đổi nó thành chuỗi []. tuy nhiên, các sự kiện vẫn chưa được kích hoạt. biểu mẫu này là một phần của biểu mẫu gốc. điều đó có ảnh hưởng đến nó không? Tuy nhiên, hộp văn bản này không phải là một phần của kiểm soát của phụ huynh – michelle

+2

trong thực tế khi tôi thử kéo một tệp, tôi nhận biểu tượng bị từ chối – michelle

+1

Ứng dụng của bạn có đang chạy dưới quyền cao (quản trị viên) trên Win7/Vista không? Kéo thả từ trình thám hiểm sẽ không hoạt động trong trường hợp này. – max

4

không chạy nó từ visual studio ... chạy .exe được tạo ra khi bạn xây dựng giải pháp của bạn .. hy vọng rằng sẽ giúp :)

+1

Việc chạy dự án trong Visual Studio có tạo sự khác biệt không? Có thật không ? Visual Studio có nên tắt chức năng kéo thả không? – PurpleXenon

+0

yeah bằng cách nào đó nó đã không làm việc từ gỡ lỗi nhưng nó đã làm việc trực tiếp – PersyJack

+0

Tôi viết lại kiểm soát của tôi 3 lần cố gắng để con số này ra ... :(Cảm ơn – Jeff

8

đặc quyền Elevated không nên có bất cứ điều gì để làm với nó. Bạn cũng cần triển khai sự kiện DragOver ngoài số DragDrop mà Max đã trả lời. Đây là mã mà nên được bổ sung cho 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

Trong các ứng dụng Windows Form, sau đây cần phải được thực hiện để làm cho nó hoạt động : 1) Đặt 'TextBox.AllowDrop = true;' 2) Xử lý sự kiện 'TextBox.DragDrop()' sử dụng mã tối đa 3) Cũng xử lý sự kiện 'TextBox.DragOver()' sử dụng mã của Joao ở trên. Khi tất cả 3 điều kiện được đáp ứng thì nó sẽ hoạt động. Không có "quyền sở hữu cao" được yêu cầu trong trường hợp của tôi, nhưng bạn luôn có thể thay đổi lối tắt Visual Studio của bạn thành "chạy với tư cách Quản trị viên" nếu bạn phát hiện ra đó là vấn đề với bạn. –

4

Nếu bạn đang sử dụng WPF và nó vẫn không làm việc với các câu trả lời ở đây (đó là trường hợp của tôi), bạn cần phải sử dụng

e.Handled = true; 

trong sự kiện PreviewDragEnter, như được mô tả herehere (chúng giống nhau, nhưng chỉ trong trường hợp một người đi xuống).

Dưới đây là đoạn mã, từ nguồn đó:

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

Nó không nên là PreviewDragEnter, nó phải là * PreviewDragOver *. Sử dụng sự kiện đó đã làm việc cho tôi cho TextBox. –

1

Nếu visual studio của bạn đang chạy dưới quyền quản trị Kéo và thả chức năng dường như không làm việc.

=> Chạy studio trực quan không có quyền quản trị và nó sẽ hoạt động

Các vấn đề liên quan