使用另一个枚举中的特定值创建枚举

时间:2013-05-21 23:17:23

标签: c# winforms enums

我想从System.Windows.Forms.Keys创建一个子集枚举列表,它只包含A-Z,0-9和F键。目前,我将完整列表设置为winform上的组合框:

comboBox1.DataSource = Enum.GetValues(typeof (System.Windows.Forms.Keys));

是否有快速创建此子集的方法?我目前的解决方法是硬编码可接受的密钥列表:

private List<Keys> acceptableKeys = new List<Keys>
            {
                Keys.A,
                Keys.B, Keys.C, Keys.D, Keys.E, Keys.F, Keys.G, Keys.H, Keys.I, Keys.J, Keys.K, Keys.L, Keys.M,
                Keys.N, Keys.O, Keys.P, Keys.Q, Keys.R, Keys.S, etc....
            };

并将其用作dataSource

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

如果您不想对其进行硬编码,可以尝试检查枚举的int值并将其添加到列表中。

var enums = Enum.GetValues(typeof(Keys));

List<Keys> acceptableKeys = new List<Keys>();
foreach (var e in enums)
{
   int val = (int)e;
   //The boundaries represent A-Z, 0-9, F1 - F24 respectively
   if ((val >= 65 && val <= 90) || (val >= 48 && val <= 59) || (val >= 112 && val <= 135))
       acceptableKeys.Add((Keys)e);
}

这不包括小键盘上的数字,但是如果你想包含这些数字,你可以添加该检查。