代码之家  ›  专栏  ›  技术社区  ›  devdigital

为什么System.Windows.MessageBoxImage具有相同值的枚举子项?

  •  4
  • devdigital  · 技术社区  · 14 年前

    namespace System.Windows
      {
          public enum MessageBoxImage
          {
              None = 0,
              Error = 16,
              Hand = 16,
              Stop = 16,
              Question = 32,
              Exclamation = 48,
              Warning = 48,
              Asterisk = 64,
              Information = 64,
          }
      }
    

    Show方法如何确定是显示错误图像还是显示手部图像? 我该如何编写一个方法来接受MessageBoxImage类型,并返回一个映射到MessageBoxImage类型的CustomMessageBoxImage类型,因为我不能同时包含MessageBoxImage.Error和MessageBoxImage.Hand这两个switch语句?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Jason Williams    14 年前

    历史上有不同的图标最终被合并成一个实际的图标图像。因此,有几个枚举类型值(例如Hand和Stop)在现代Windows操作系统中的含义是相同的。它们之间没有区别,只是化名而已。

    我建议您使用自己的“Status”值,然后根据需要将其转换为图标值—这两个值传递的信息完全不同,因此尝试重载(损坏)MessageBox值来传递额外的信息不是一个很好的方法。

        2
  •  0
  •   Ally    9 年前

    不是所有的枚举(错误、信息、停止和警告)都可以在紧凑的框架中使用。

    https://msdn.microsoft.com/en-us/library/system.windows.forms.messageboxicon(v=vs.80).aspx

        3
  •  -1
  •   Barina    5 年前

    var icon = MessageBoxImage.Error;
    
    switch ((int)icon)
    {
        case (int)MessageBoxImage.Error:
            // Reached by setting icon above to "Hand" and "Stop" as well.
            break;
        case (int)MessageBoxImage.Question:
            break;
        case (int)MessageBoxImage.Warning:
            // Reached by setting icon above to "Exclamation" as well.
            break;
        case (int)MessageBoxImage.Information:
            // Reached by setting icon above to "Asterisk" as well.
            break;
        default:
        case (int)MessageBoxImage.None:
            break;
    }