1

.NET 3.5 でコンパイルされたアプリケーションを作成しました。FolderBrowserDialog オブジェクトを使用しました。ボタンが押されると、次のコードを実行します。

FolderBrowserDialog fbd = new FolderBrowserDialog ();
fbd.ShowDialog();

フォルダ ダイアログが表示されますが、フォルダが表示されません。私が見る唯一のものは、ボタンOKとキャンセルです(ShowNewFolderButtonプロパティがtrueに設定されている場合は、新しいフォルダーボタンを作成します)。別のフォームでまったく同じコードを試すと、すべて正常に動作します。

何か案は??

4

1 に答える 1

1

ダイアログを実行しているスレッドが STAThread にあることを確認してください。たとえば、Main メソッドが [STAThread] 属性でマークされていることを確認します。

[STAThread]
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

それ以外の場合は、これを行うことができます ( FolderBrowserDialog クラスのコミュニティ コンテンツから)。

/// <summary>
/// Gets the folder in Sta Thread
/// </summary>
/// <returns>The path to the selected folder or (if nothing selected) the empty value</returns>
private static string ChooseFolderHelper()
{
    var result = new StringBuilder();
    var thread = new Thread(obj =>
    {
        var builder = (StringBuilder)obj;
        using (var dialog = new FolderBrowserDialog())
        {
            dialog.Description = "Specify the directory";
            dialog.RootFolder = Environment.SpecialFolder.MyComputer;
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                builder.Append(dialog.SelectedPath);
            }
         }
     });

     thread.SetApartmentState(ApartmentState.STA);
     thread.Start(result);

     while (thread.IsAlive)
     {
         Thread.Sleep(100);
      }

    return result.ToString();
}
于 2010-04-20T05:09:08.850 に答える