См. снимок ниже. Это было взято из рабочего процесса "Создание нового проекта" в Visual Studio 2008.
Это окно используется для выбора папки, в которой будет храниться проект. Как создать аналогичное окно в моем приложении С#?
См. снимок ниже. Это было взято из рабочего процесса "Создание нового проекта" в Visual Studio 2008.
Это окно используется для выбора папки, в которой будет храниться проект. Как создать аналогичное окно в моем приложении С#?
Это нечто похожее в Office, диалог, который позволяет выбрать папку. Единственное различие заключается в том, что кнопка "Выбрать папку" называется "ОК" вместо "Выбрать папку".
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Core.FileDialog fileDialog = app.get_FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker);
fileDialog.InitialFileName = "c:\\Temp\\"; //something you want
int nres = fileDialog.Show();
if (nres == -1) //ok
{
Microsoft.Office.Core.FileDialogSelectedItems selectedItems = fileDialog.SelectedItems;
string[] selectedFolders = selectedItems.Cast<string>().ToArray();
if (selectedFolders.Length > 0)
{
string selectedFolder = selectedFolders[0];
}
}
Конечно, вам нужно добавить ссылки на Microsoft.Office.Core(Библиотека объектов Microsoft Office 14.0) и Microsoft.Office.Interop.Excel(Библиотека объектов Microsoft Excel 14.0).
Я нашел хорошую статью о умолчанию FolderBrowserDialog и ее ограничениях: http://www.ssware.com/articles/folderbrowserdialog-unmasked-everything-you-wanted-to-know-about-the-folder-browser-component-from-dotnet-framework.htm
Существует сторонний компонент "Shell MegaPack" (http://www.ssware.com/megapack.htm) из ssware, который предлагает проводник Windows, такой как управление браузерами файлов и папок для WinForms, ASP.net и WPF.
Я изменил код с С# на VB, а мой env - VS2015 + Office 2010. Мой код немного отличается от кода Daniel, поскольку некоторые функции от кода Daniel поддерживают только Office 2003/2007
Используя новый экземпляр excel, он будет медленнее, чем просто открытие OpenFileDialog или OpenFolderDialog, но он более удобен для пользователя. Моя программа только вызывает этот код один раз, поэтому отключение производительности для удобства пользователя не является проблемой в моем случае.
Imports Microsoft.Office
Imports Excel = Microsoft.Office.Interop.Excel
Private Sub Button_select_raw_dir_Click(sender As Object, e As EventArgs) Handles Button_select_raw_dir.Click
Dim raw_app As Excel.Application = New Excel.Application
Dim raw_data_open_folder_dialog As Microsoft.Office.Core.FileDialog
raw_data_open_folder_dialog = raw_app.FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker)
raw_data_open_folder_dialog.AllowMultiSelect = False
raw_data_open_folder_dialog.Title = "Please select the raw data dir "
Dim nres As Integer = raw_data_open_folder_dialog.Show()
Dim sz_SelectedPath As String = Nothing
If nres = -1 Then '-1 means open... lol
For Each selectedItems As Object In raw_data_open_folder_dialog.SelectedItems
sz_SelectedPath = selectedItems.ToString()
Next
TextBox_raw_data_dir.Text = sz_SelectedPath
End If
raw_app.Quit()
ReleaseComObject(raw_app)
GC.Collect()
GC.WaitForPendingFinalizers()
End Sub
' Release excel objects to avoid memory leak
Public Sub ReleaseComObject(ByRef obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
MsgBox("Exception! Failed to release com obj, debug your code.")
End Try
End Sub
Если вы хотите версию на С#, я считаю, что вы достаточно умны, чтобы перенести ее на С#:)