9

我第一次在 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.OKexcept 在这里没有显示为有效值。

    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

4 回答 4

17

好的,事实证明这里其他答案的所有答案都是正确的。

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

每次我DialogResult在我的 if 语句中尝试使用 Intellisense 时看到它(正如我被告知要使用的那样,我看到了这个:

布尔?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在 usings 中引用过,这就是为什么我从未想过像上面的代码片段那样从 System 中引用该类。我以为它无论如何都在使用它。

于 2013-02-12T07:22:56.217 回答
0

DialogResult是一个枚举,定义了一些值来指示对话框的返回值。

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

if (result == DialogResult.OK){
  txtSource.Text = fbd.SelectedPath;
}
于 2013-02-12T06:58:32.603 回答
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。

于 2018-07-14T10:24:02.090 回答
-1

DialogResult.(好的,取消你想检查的任何内容),

if (result == DialogResult.OK) // DialogResult.(Your desired result, select from the list it generates)
{
    txtSource.Text = fbd.SelectedPath;
}
于 2013-02-12T06:51:00.430 回答