Почему System.Windows.MessageBoxImage имеет подпункты перечисления с одинаковым значением? - PullRequest
5 голосов
/ 17 мая 2010

Я пытаюсь написать свою собственную абстракцию над перечислением 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,
      }
  }

Как метод Show определяет, отображать ли изображение ошибки или изображение руки? Как мне написать метод, который принимает тип MessageBoxImage и возвращать тип CustomMessageBoxImage, который сопоставляется с типом MessageBoxImage, поскольку я не могу включить и MessageBoxImage.Error, и MessageBoxImage.Hand в одну и ту же инструкцию switch?

Ответы [ 2 ]

4 голосов
/ 17 мая 2010

Исторически существовали различные значки, которые в итоге были объединены в одно действительное изображение значка. Таким образом, есть несколько значений перечисляемого типа (например, Hand и Stop), которые просто означают одно и то же в современных ОС Windows. Между ними нет никакой разницы, они просто псевдонимы.

Если вы хотите иметь новые значения для представления различий, то вы можете использовать вторичную переменную (например, "isError) для передачи разницы, которую вы хотите применить между Stop и Hand. Или вы можете скопировать значение Icon в int и установите высокий бит в значении, чтобы указать эту дополнительную информацию, чтобы ее можно было «переносить» в пределах одной переменной. Значение MessageBoxIcon.

Я бы предложил иметь собственное значение «Status», а затем преобразовать его в значение Icon по мере необходимости - они передают совершенно разную информацию, поэтому попытка перегрузить (повредить) значение MessageBox для передачи дополнительной информации не будет быть очень хорошим подходом.

0 голосов
/ 20 апреля 2015

Не все перечисления (Ошибка, Информация, Остановка и Предупреждение) доступны в Compact Framework.

Если вы совместно используете файлы кода между полным клиентом Windows и клиентом Compact Framework, вам потребуется использовать перечисления Asterisk, Exclamation, Hand, None или Question.

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

...