1

我想从中创建一个子集枚举列表System.Windows.Forms.Keys,其中仅包括 AZ、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.

有没有更好的方法来做到这一点?

4

1 回答 1

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);
}

这将不包括数字键盘上的数字,但您可以添加该检查是否也要包括这些数字。

于 2013-05-21T23:34:46.020 回答