FolderNameEditor.FolderBrowserクラスは、SHBrowseForFolderシェル関数を利用します。ユーザーが無効なパスを入力した場合のデフォルトの機能は、デフォルトで選択されたアイテム(この場合はデスクトップフォルダー)を返すことです。
SHBrowseForFolderシェル関数は、BROWSEINFO(構造)型の引数を想定しています。
この構造により、コールバック関数(イベントが発生したときにダイアログボックスが呼び出すアプリケーション定義関数へのポインター)を定義できます。このコールバックでは、必要なことを達成できる可能性があります。
FolderBrowserがこのシェル関数を呼び出すと、このコールバック関数はnullに設定されるため、FolderNameEditorクラスを使用して必要なものを実現する方法はありません。
ただし、コードプロジェクトには、SHBrowseForFolderを使用し、イベントコールバックをラップして、イベント(OnValidateFailed)を介して無効なフォルダーエントリへのアクセスを提供するライブラリがあります。参照:C#はシェルを実行します、パート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;
}
}
お役に立てれば。