我第一次在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;
}
}
}
答案 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;
}