在WPF中使用FolderBrowserDialog的DialogResult

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

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

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

OpenFileDialog ofd = new OpenFileDialog(); Nullable 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' does not contain a definition for 'OK' // and no extention method 'OK' accepting a first argument of type // 'System.Nullable' could be found. // if (result == DialogResult.OK) { txtSource.Text = fbd.SelectedPath; } } } 

好吧所以事实certificate所有答案其他答案都是对的。

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

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

布尔? 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中的类。 无论如何我还以为是在用它。

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

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

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

这里的答案很晚,但为什么不呢。 。

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

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

DialogResult。(好的,取消你要检查的任何东西),

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