[C#][Windows Formsアプリ][FolderBrowserDialog] ShowNewFolderButton で「新しいフォルダ」を表示・制御する

スポンサーリンク

はじめに

本記事では、Windows Forms の FolderBrowserDialog における ShowNewFolderButton(ご指定の「ShowNewFolder」は正式名が ShowNewFolderButton)の使い方を解説します。ShowNewFolderButton はダイアログ内に「新しいフォルダ」ボタンを表示するかどうかを制御するブール型プロパティです。表示・非表示の切り替え方、ボタンが無効化される条件、権限・ルート設定との関係を、初心者にもわかりやすく整理します。

説明

FolderBrowserDialog はフォルダを1つ選択するための標準ダイアログです。ShowNewFolderButtontrue にすると、ダイアログに「新しいフォルダ」ボタンを表示して、その場でフォルダを作成できます(既定値は表示)。
一方、false にするとボタンが非表示になり、ユーザーは既存フォルダのみを選択できます。

なお、表示していても無効化(押せない状態)になるケースがあります。たとえば次のような場合です。

・ルートや現在位置が「ドライブ一覧」のようにフォルダ作成ができない場所(例:RootFolder = MyComputer 直下)
・対象フォルダに書き込み権限がない/ネットワークの制限がある

こうした場合は、ShowNewFolderButton = true でも OS 側の判断でボタンが無効化・非表示になることがあります。アプリ側では「必要なら既存の書き込み可能な場所へ誘導する」などのガイドを併用すると良いでしょう。

サンプルコード

以下はチェックボックスで ShowNewFolderButton の有無を切り替えながら、ダイアログを表示して選択結果をテキストボックスに出力する最小サンプルです。

using System; 
using System.Windows.Forms;

public class MainForm : Form
{
    private CheckBox allowCreateCheckBox;
    private TextBox resultTextBox;
    private Button browseButton;

    public MainForm()
    {
        Text = "FolderBrowserDialog: ShowNewFolderButton サンプル";
        Width = 680;
        Height = 160;
        StartPosition = FormStartPosition.CenterScreen;

        allowCreateCheckBox = new CheckBox
        {
            Text = "「新しいフォルダ」を許可する (ShowNewFolderButton)",
            Left = 12,
            Top = 12,
            AutoSize = true,
            Checked = true // 既定で表示
        };

        var resultLabel = new Label
        {
            Text = "選択フォルダ:",
            Left = 12,
            Top = 48,
            AutoSize = true
        };

        resultTextBox = new TextBox
        {
            Left = 90,
            Top = 44,
            Width = 470,
            Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right
        };

        browseButton = new Button
        {
            Text = "参照...",
            Left = 570,
            Top = 42,
            Width = 80,
            Anchor = AnchorStyles.Top | AnchorStyles.Right
        };
        browseButton.Click += BrowseButton_Click;

        Controls.Add(allowCreateCheckBox);
        Controls.Add(resultLabel);
        Controls.Add(resultTextBox);
        Controls.Add(browseButton);
    }

    private void BrowseButton_Click(object sender, EventArgs e)
    {
        using (var dialog = new FolderBrowserDialog())
        {
            dialog.Description = "バックアップ先のフォルダを選択してください";
            dialog.ShowNewFolderButton = allowCreateCheckBox.Checked;

            // 必要に応じて初期位置を指定(例:ドキュメント)
            // dialog.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var result = dialog.ShowDialog(this); // 親フォームを指定
            if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(dialog.SelectedPath))
            {
                resultTextBox.Text = dialog.SelectedPath;
            }
            else
            {
                // Cancel/Close は何もしない(必要ならユーザーにガイドを出す)
            }
        }
    }

}
実行例

実行例

解説(重要ポイント)

(1)切り替えは単純なブールdialog.ShowNewFolderButton = allowCreateCheckBox.Checked; で表示・非表示を即切替できます。迷ったら「true」で表示しておき、書き込めない場所では OS が無効化してくれると考えると安全です。

(2)親ウィンドウを渡すShowDialog(this) としてオーナーを指定すると、ダイアログが背面に隠れにくくなり、フォーカスが安定します。

(3)初期位置の工夫:ユーザー経験を上げるには SelectedPath をよく使うフォルダや書き込み可能な場所にしておくと、「新しいフォルダ」 ボタンを押してすぐに作成でき、迷いが減ります。

(4)権限での挙動:管理者権限が必要な場所などではボタンが無効化・失敗することがあります。選択後にアクセス可否を検証し、必要ならリトライや別フォルダを促すメッセージを出しましょう。

つまづきポイント

正式名の取り違え:「ShowNewFolder」ではなく ShowNewFolderButton が正式名です。IntelliSense で確認しましょう。

ボタンが出ない/押せない:プロパティは true でも、現在位置や権限次第で OS が無効化・非表示にします。バグではないことが多いです。

RootFolder と併用時の注意RootFolder = MyComputer 直下では作成できないため、ユーザーがドライブを選ぶまでボタンが無効になることがあります。初期位置を C:\ など作成可能な場所に寄せると良いです。

例外処理の不足:選択後にアプリ側でフォルダを作成・書き込みするなら、アクセス拒否・パス長・ネットワーク切断などの例外を必ず捕捉しましょう。

まとめ

ShowNewFolderButton は「新しいフォルダ」ボタンの表示可否を決めるシンプルなスイッチです。true を基本にしつつ、権限や現在位置によっては無効化される点を理解しておけば、ユーザーは迷わず保存先を用意できます。初期位置の最適化とオーナー指定を合わせて、快適なフォルダ選択体験を実装しましょう。

Please follow and like us:

コメント

タイトルとURLをコピーしました