无法使用DialogResult

本文关键字:DialogResult | 更新日期: 2023-09-27 17:58:46

我尝试使用DialogResult检查Messagebox是否取消。我正在使用以下代码,我认为没有任何问题:

DialogResult dlgResult = MessageBox.Show(
   "Save changes before closing?", 
   "Warning", 
   MessageBoxButton.YesNoCancel, 
   MessageBoxImage.Question);

但是Visual Studio在说时出错

'System.Windows.Window.DialogResult'是"属性",但使用方式类似"类型"

无法使用DialogResult

DialogResult枚举和Window.DialogResult属性之间存在冲突。

要解决此问题,可以使用enumuration的完全限定名称。如下所示:

System.Windows.Forms.DialogResult dlgResult = ...

但是,由于您使用的是WPF,请使用MessageBoxResult枚举来获得消息的结果:

MessageBoxResult result = 
    MessageBox.Show("Would you like to see the simple version?", 
    "MessageBox Example", MessageBoxButton.OKCancel);

问题是DialogResult也是表单的一个属性,编译器认为您引用了这个属性。

这里有几个选择:

  • 使用类型System.Windows.Forms.DialogResult的完全限定名称
  • 使用var让编译器找出类型并消除名称冲突

DialogResult不是类型,它是属性,您需要类型MessageBoxResult

从这个问题我可以看出你没有使用winforms。所以代码会显示

MessageBoxResult result = MessageBox.Show(
    "Save changes before closing?",
    "Warning",     
    MessageBoxButton.YesNoCancel,
    MessageBoxImage.Question);

尝试将dlgResult声明为var。然后它应该工作

    var dlgResult = 
        MessageBox.Show("Save changes before closing?", 
            "Warning", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);

此外,WPF下的MessageBox.Show确实返回MessageBoxResult,而不是DialogResultDialogResult用于WindowsForms

只需尝试MessageBoxResult

MessageBox将返回MessageBoxResult枚举值

            MessageBoxResult dlgResult = MessageBox.Show("Save changes before closing?","Warning", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
        Console.WriteLine(dlgResult);
MessageBoxResult result = MessageBox.Show(
"Save changes before closing?",
"Warning",     
MessageBoxButton.YesNoCancel,
MessageBoxImage.Question);

然后使用结果检查