FolderNameEditor.FolderBrowser 클래스는 SHBrowseForFolder 셸 함수를 사용합니다. 잘못된 경로를 입력하는 사용자의 기본 기능은 기본 선택된 항목 (이 경우 Desktop 폴더)을 반환하는 것입니다.
SHBrowseForFolder 셸 함수는 BROWSEINFO (구조체) 인수를 필요로합니다.
이 구조는 콜백 함수 (이벤트가 발생할 때 대화 상자에서 호출하는 응용 프로그램 정의 함수에 대한 포인터)의 정의를 허용하며 사용자가 필요로하는 것을 달성 할 가능성이있는 것은이 콜백에 있습니다.
이 콜백 함수는 FolderBrowser가이 셸 함수를 호출 할 때 null로 설정되므로 FolderNameEditor 클래스를 사용하여 필요한 것을 성취 할 수있는 방법이 없습니다.
그러나 codeproject에는 SHBrowseForFolder를 사용하고 이벤트 콜백을 래핑하여 이벤트 (OnValidateFailed)를 통해 잘못된 폴더 항목에 대한 액세스를 제공하는 라이브러리가 있습니다. 참조 : C# does Shell, Part 1
일부 이벤트 (사용자가 아무 것도 입력 할 수있는) 이후에 입력 한 경로를 사용하여 디렉토리를 만들 수 있습니다. 이 도움이
using ShellLib;
...
public class OpenFolderDialog
{
ShellBrowseForFolderDialog folderDialog;
string selectedPath;
public OpenFolderDialog()
{
folderDialog = new ShellBrowseForFolderDialog();
folderDialog.OnValidateFailed += new ShellBrowseForFolderDialog.ValidateFailedHandler(dialog_OnValidateFailed);
}
int dialog_OnValidateFailed(ShellBrowseForFolderDialog sender, ShellBrowseForFolderDialog.ValidateFailedEventArgs args)
{
selectedPath = args.invalidSel;
//Use selectedPath here to create the directory.
return 0;
}
public string GetFolder()
{
selectedPath = string.Empty;
folderDialog.ShowDialog();
return selectedPath == string.Empty ? folderDialog.FullName : selectedPath;
}
}
희망 : 여기
은 예입니다.
WinForms ['FolderBrowserDialog'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.folderbrowserdialog.aspx) 클래스에는' FolderBrowserStyles' 값 ... 실제로 어떤 수업을 사용하고 있습니까? –
http://msdn.microsoft.com/en-us/library/system.windows.forms.design.foldernameeditor.folderbrowser%28v=VS.90%29.aspx – galbarm
보호 된 중첩 된 봉인 된 클래스입니다. 당신은 그것을 얻기 위해 반사를 해킹하고 있습니까? –