【问题标题】:Cannot implicitly convert from dialog result to bool无法从对话结果隐式转换为布尔值
【发布时间】:2013-07-11 18:33:23
【问题描述】:

我正在尝试将代码从 wpf 复制到 winforms(此代码在 wpf 中工作)

public static bool? ShowSettingsDialogFor(ICustomCustomer)
{
   if (cust is BasicCustomer)
   {
      return (new BCustomerSettingsDialog()).ShowDialog();
   }
}

我收到编译错误消息

无法将类型“System.Windows.Forms.DialogResult”隐式转换为 “布尔?”

【问题讨论】:

  • 为什么要返回DialogResult?错误消息清楚地表明:您将布尔值定义为此方法的返回值,但您正在返回 DialogResult 的实例。什么鬼?显然你可能需要使用DialogResult枚举来返回一个布尔值。

标签: c# .net winforms


【解决方案1】:

改成

return (new BCustomerSettingsDialog()).ShowDialog() == DialogResult.OK;

【讨论】:

    【解决方案2】:

    原因是,在 Windows 窗体中,ShowDialog 方法返回一个DialogResult 枚举值。可能值的范围取决于您可用的按钮,它们的bool? 转换可能取决于它们在您的应用程序中的含义。以下是处理几种情况的一些通用逻辑:

    public static bool? ShowSettingsDialogFor(ICustomCustomer)
    {
       if (cust is BasicCustomer)
       {
          DialogResult result = (new BCustomerSettingsDialog()).ShowDialog();
    
          switch (result)
          {
              case DialogResult.OK:
              case DialogResult.Yes:
                  return true;
    
              case DialogResult.No:
              case DialogResult.Abort:
                  return false;
    
              case DialogResult.None:
              case DialogResult.Cancel:
                  return null;
    
              default:
                  throw new ApplicationException("Unexpected dialog result.")
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 2014-09-07
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多