Keys.D1 = LButton | ShiftKey | Космос? - PullRequest
       2

Keys.D1 = LButton | ShiftKey | Космос?

2 голосов
/ 13 октября 2011

Программа, которую я написал, которая обычно работает хорошо, теперь волнуется из-за того, что Keys.D1 имеет значение "LButton | ShiftKey | Space"

Вот скриншот проблемы: enter image description here

ModifierKeys - это перечисление со следующим определением:

public enum ModifierKeys : uint
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}

Что здесь происходит? Других ссылок на Keys.D1 нет.

1 Ответ

3 голосов
/ 13 октября 2011

Цитирование из Перечисление ключей :

Осторожно Не используйте значения в этом перечислении для комбинированных побитовых операций.Значения в перечислении не являются взаимоисключающими.

Несмотря на то, что перечисление System.Windows.Forms.Keys имеет атрибут [Flags], единственными флагами, которые могут быть безопасно использованы в качестве флагов, являются:

  • Keys.Shift
  • Keys.Ctrl
  • Keys.Alt

Все остальные значения не являются значениями перечисления "flags".В результате некоторые комбинации значений, которые не являются значениями «флагов», случайно совмещаются, образуя другие значения, которые не являются значениями «флагов».

Эффект, который вы видите, - это оператор Enum.ToString() неправильно атрибут [Flags] для создания таких комбинаций.Это безвредно, потому что клавиши ShiftKey и Space никогда не предназначены для объединения, согласно документации выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...