2013-05-21 123 views
1

我想创建一个子集枚举列表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

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

回答

3

如果你不想硬编码它,你可以尝试检查enum的值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); 
} 

这将不包括在小键盘上的数字,但如果要包括那些,以及可以添加检查。

+0

完美地工作!好想法。谢谢:) –

+0

不客气:) – keyboardP