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

dev*_*tal 5 .net windows messagebox

我正在尝试对MessageBoxImage枚举编写自己的抽象,并看到MessageBoxImage定义为:

namespace System.Windows
  {
      public enum MessageBoxImage
      {
          None = 0,
          Error = 16,
          Hand = 16,
          Stop = 16,
          Question = 32,
          Exclamation = 48,
          Warning = 48,
          Asterisk = 64,
          Information = 64,
      }
  }
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ams 5

从历史上看,不同的图标最终被合并为一个实际的图标图像。因此,在现代Windows操作系统中,有多个枚举类型值(例如,Hand和Stop)仅表示同一意思。它们之间没有区别,它们只是别名。

如果要使用新值表示差异,则可以使用辅助变量(例如“ isError”)来传达您希望在“止损”和“手形”之间应用的差异。也可以将Icon值复制到一个int并设置一个高值中的一位表示此额外信息,因此可以在单个变量中“携带”,也可以使用与MessageBoxIcon“无关”的自己的枚举,并具有将值转换为MessageBoxIcon值的方法。

我建议您拥有自己的“ Status”值,然后根据需要将其转换为Icon值-两者传递的信息完全不同,因此尝试重载(损坏)MessageBox值以传递额外的信息不是一个很好的选择。好方法。