C# WPF中带有FolderBrowserDialog的DialogResult

C# WPF中带有FolderBrowserDialog的DialogResult,c#,wpf,folderbrowserdialog,C#,Wpf,Folderbrowserdialog,第一次在WPF中实现FolderBrowserDialog时,我一点也不喜欢它 除了我发现Windows.Forms在我的项目中没有被引用的问题之外,现在我很难看到DialogResult返回值是什么 使用OpenFileDialog,过去我是这样做的: OpenFileDialog ofd = new OpenFileDialog(); Nullable<bool> result = ofd.ShowDialog(); if (result == true) { // a

第一次在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。(好的,取消您想要检查的内容)

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

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

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

好的,结果所有的答案都是正确的

他们只是错过了一件事,我想那是我的错

每次我试图在if语句中使用Intellisense中的
DialogResult
时(正如我被告知要使用的那样,我都会看到:

bool?窗口.对话框.结果
获取或设置对话框结果值,该值是从 System.Windows.Window.ShowDialog()方法

例外情况:
System.InvalidOperationException异常

这个特定的DialogResult对象不是我要找的对象

最终起作用的是:

DialogResult result = fbd.ShowDialog();

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

值得注意的是,我的使用中确实引用了
System.Windows.Forms
,这就是为什么我从来没有想过像上面的代码片段那样引用系统中的类。我还以为它正在使用它。

这里回答晚了,但为什么不

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

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

Windows窗体
对话框
不像WPF对话框那样返回可为null的bool,但是。只是一个提示。:)如果您无法理解不同类型之间转换的错误,那么在尝试使用WPF之前,您可能应该回到OOP和C#basics,WPF是一个复杂的框架,不适合没有经验的开发人员使用。@HighCore虽然您的建议可能是最中肯的,但它也无关紧要。我理解这个错误,这就是为什么我尝试将result设置为DialogResult对象,但在if语句中仍然不起作用-因此我的困惑是您可以使用var而不是Nullable,var result=ofd.ShowDialog();根据问题:
通常我会使用DialogResult.OK,除非它在此处不显示为有效值。
根据问题:
通常我会使用DialogResult.OK,除非它在此处不显示为有效值。
作为旁白,我强烈建议不要执行类似
cmbTemplate.SelectedItem==WPF中的“Blockbusters”
,因此您不应该将UI元素视为数据元素,并根据这些元素的状态定义您的程序逻辑。众所周知,我通常不这么做,但由于我是WPF的新手,我还没有找到更好的方法来实现这一点(我并没有非常努力地尝试).虽然组合框中每个项目的文本在执行期间的任何时候都不会更改,所以我真的不太担心
DialogResult result = fbd.ShowDialog();

if (result == System.Windows.Forms.DialogResult.OK)
{
    // do work here
}
private void SelectFolder()
{
    var dialog = new FolderBrowserDialog();
    var status = dialog.ShowDialog(); // ShowDialog() returns bool? (Nullable bool)
    if (status.Equals(true))
    {
        SelectedFolderPath = dialog.SelectedPath;
    }
}