在WPF中使用FolderBrowserDialog的DialogResult

时间:2013-02-11 13:58:03

标签: c# wpf folderbrowserdialog

我第一次在WPF中实现FolderBrowserDialog并且我不喜欢它...

除了我在项目中没有引用Windows.Forms的问题之外,现在我在查看DialogResult返回值是什么时遇到了麻烦......

使用OpenFileDialog,过去我已经这样做了:

OpenFileDialog ofd = new OpenFileDialog();
Nullable<bool> result = ofd.ShowDialog();

if (result == true)
{
    // all went well, carry on and do your thing here
}

不幸的是,我现在得到的错误是关于从DialogResult类型转换为bool以及任何有你的转换。

在WPF中使用对话框时,似乎无法找到关于如何完成此步骤的任何内容,是否有人可以解释一下?

提前致谢!

编辑

这是我的代码修改后没有类型转换错误。我不确定检查result的价值是多少。通常我会使用DialogResult.OK,除非这里没有显示为有效值。

    private void btnBrowse_Click(object sender, RoutedEventArgs e)
    {
        if (cmbTemplate.SelectedItem == "Blockbusters")
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            DialogResult result = fbd.ShowDialog();

            //
            // ERROR: 'System.Nullable<bool>' does not contain a definition for 'OK'
            // and no extention method 'OK' accepting a first argument of type
            // 'System.Nullable<bool>' could be found.
            //
            if (result == DialogResult.OK)
            {
                txtSource.Text = fbd.SelectedPath;
            }
        }
    }

4 个答案:

答案 0 :(得分:15)

好的,所以这里的所有答案都是正确的其他答案。

他们错过了一件事,我认为这是我的错......

每次我在Intellisense中看到DialogResult时都试图在我的if语句中使用它(因为我被告知要使用它,我看到了这个:

  

BOOL? Window.Dialog.Result
  获取或设置对话框结果值,该值是从中返回的值   System.Windows.Window.ShowDialog()方法。

     

例外:
    System.InvalidOperationException

这个特殊的DialogResult对象不是我想要的对象。

最终起作用的是以下内容:

DialogResult result = fbd.ShowDialog();

if (result == System.Windows.Forms.DialogResult.OK)
{
    // do work here
}

值得注意的是,我在使用中确实引用了System.Windows.Forms这就是为什么我从未想过在上面的代码片段中引用System中的类。无论如何我认为它正在使用它。

答案 1 :(得分:0)

DialogResult是一个枚举,它定义了表示对话框返回值的值。

在您的代码中,您应检查DialogResult.OK以使用对话框中选择的路径初始化您的变量。在对话框中按下“确定”按钮时返回DialogResult.OK,否则返回DialogResult.Cancel

if (result == DialogResult.OK){
  txtSource.Text = fbd.SelectedPath;
}

答案 2 :(得分:0)

在这里延迟回答,但为什么不只是。

private void SelectFolder()
{
    var dialog = new FolderBrowserDialog();
    var status = dialog.ShowDialog(); // ShowDialog() returns bool? (Nullable bool)
    if (status.Equals(true))
    {
        SelectedFolderPath = dialog.SelectedPath;
    }
}

您可以在调试会话中查看结果。单击“取消”按钮时,它将返回false。

答案 3 :(得分:-1)

DialogResult。(好的,取消你要检查的任何内容),

if (result == DialogResult.OK) // DialogResult.(Your desired result, select from the list it generates)
{
    txtSource.Text = fbd.SelectedPath;
}