gpt4 book ai didi

c# - 在 C# 中将枚举列表转换为标志

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:46 25 4
gpt4 key购买 nike

我目前正在使用一个热键包,它需要一组 KeyModifierKey枚举作为标志。

例如,这将注册 Ctrl+Shift+4热键:

hotKey = new GlobalHotKey.HotKey(Key.D4, ModifierKeys.Shift | ModifierKeys.Control);

据我了解,将枚举作为标志传递时,实际上只是按位执行 or操作(因此语法)。

对于我的 UI,我需要将按键存储在 List<Key> 中.但是,我最终需要将按下的键设置为新的热键,并且我需要转换我的 List<Key>到一个普通的老Key (使用标志操作)。

因为我认为它只是按位or操作,我尝试使用 LINQ 解决此问题。

hotkeysPressedBitwise = hotkeysPressed.Select(f => f).Aggregate((x, y) => x | y);

哪里hotkeysPressed是我的List<Key> .我的 LINQ 语句工作正常,但是,当它实际传递到我的函数中时,它没有给我预期的效果。

例如,当我传入 X 时和 C ,我的 LINQ 语句返回一个等于 X | C 的值.如果我把它转换到 Key枚举,它给了我 F22出于某种原因的关键。

hotKey = new GlobalHotKey.HotKey( keys , ModifierKeys.None);不起作用。 (出于相似性,我暂时将 ModifierKeys 设置为 none)。

我是不是漏掉了什么?

最佳答案

假设您指的是 System.Windows.Forms.Keys枚举。

如果您查看 Keys enum 的 MSDN 文档,您会看到以下警告:

Do not use the values in this enumeration for combined bitwise operations. The values in the enumeration are not mutually exclusive.

据我所知,Keys 枚举中唯一可以与其他值组合的值是 ShiftCtrlAlt.

查看枚举的摘录:

[Flags]
[TypeConverter(typeof(KeysConverter))]
public enum Keys
{
...
A = 65,
B = 66,
C = 67,
...
Shift = 65536,
Control = 131072,
Alt = 262144
}

关于c# - 在 C# 中将枚举列表转换为标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38472085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com