2008-09-05 29 views
26

Trong ứng dụng C# .NET 3.5 (kết hợp WinForms và WPF), tôi muốn cho phép người dùng chọn thư mục để nhập tải dữ liệu từ đó. Tại thời điểm này, nó đang sử dụng System.Windows.Forms.FolderBrowserDialog nhưng đó là một chút lame. Chủ yếu là bởi vì bạn không thể gõ đường dẫn vào nó (vì vậy bạn cần phải ánh xạ một ổ đĩa mạng, thay vì gõ một đường dẫn UNC).Chọn thư mục có .NET 3.5

Tôi muốn một cái gì đó giống như System.Windows.Forms.OpenFileDialog, nhưng đối với thư mục thay vì tệp.

Tôi có thể sử dụng cái nào? Một giải pháp WinForms hoặc WPF là tốt, nhưng tôi không muốn PInvoke vào Windows API nếu tôi có thể tránh nó.

Trả lời

36

Đừng tự tạo! Nó đã được thực hiện. Bạn có thể sử dụng FolderBrowserDialogEx - một dẫn xuất có thể tái sử dụng được tích hợp trong FolderBrowserDialog. Điều này cho phép bạn gõ vào một đường dẫn, ngay cả một đường dẫn UNC. Bạn cũng có thể duyệt các máy tính hoặc máy in với nó. Hoạt động giống như FBD tích hợp, nhưng ... tốt hơn.

Mã nguồn đầy đủ. Miễn phí. Giấy phép MS-Công cộng.

FolderBrowserDialogEx

Mã để sử dụng nó:

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx(); 
dlg1.Description = "Select a folder to extract to:"; 
dlg1.ShowNewFolderButton = true; 
dlg1.ShowEditBox = true; 
//dlg1.NewStyle = false; 
dlg1.SelectedPath = txtExtractDirectory.Text; 
dlg1.ShowFullPathInEditBox = true; 
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; 

// Show the FolderBrowserDialog. 
DialogResult result = dlg1.ShowDialog(); 
if (result == DialogResult.OK) 
{ 
    txtExtractDirectory.Text = dlg1.SelectedPath; 
} 
+30

Ahhhh! Màu hồng tươi sáng! Đôi mắt của tôi ... đôi mắt tội nghiệp của tôi ... – dthrasher

+11

con gái tôi đã làm điều đó ... – Cheeso

+6

Đó không phải là lý do thông thường sao? ;-) – Joey

1

Rất tiếc, không có hộp thoại nào khác ngoài FolderBrowserDialog để chọn thư mục. Bạn cần tự tạo hộp thoại này hoặc sử dụng PInvoke.

0

Cho đến nay, dựa trên việc thiếu phản hồi cho my identical question, tôi cho rằng câu trả lời là cuộn hộp thoại của riêng bạn từ đầu.

Tôi đã thấy những thứ ở đây và ở đó về việc phân lớp các hộp thoại chung từ VB6 và tôi nghĩ đây có thể là một phần của giải pháp, nhưng tôi chưa bao giờ thấy bất cứ điều gì về việc sửa đổi hộp thoại cho rằng nó đang chọn. Nó có thể được thông qua NET thông qua PInvoke và một số thủ thuật khác, nhưng tôi chưa thấy mã mà nó.

tôi biết nó có thể và nó không phải là Vista-cụ thể vì Visual Studio đã thực hiện nó từ VS 2003.

Đây là hy vọng ai đó trả lời một trong hai bạn hay tôi!

0

Sau giờ tìm kiếm một giải pháp tương tự tôi thấy this answer bởi leetNightShade-a working solution.

Có ba điều tôi tin là làm cho giải pháp này tốt hơn tất cả những thứ khác.

  1. Nó rất dễ sử dụng. Chỉ yêu cầu bạn bao gồm hai tệp (có thể được kết hợp với một tệp) trong dự án của bạn.
  2. Nó rơi trở lại tiêu chuẩn FolderBrowserDialog khi được sử dụng trên XP hoặc các hệ thống cũ hơn.
  3. Tác giả cấp quyền sử dụng mã cho bất kỳ mục đích nào bạn cho là phù hợp.

    Không có giấy phép nào như bạn được tự do thực hiện và thực hiện với mã bạn sẽ làm gì.

Tải mã here.

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