Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在组合框中显示所有键盘键_C#_Winforms - Fatal编程技术网

C# 如何在组合框中显示所有键盘键

C# 如何在组合框中显示所有键盘键,c#,winforms,C#,Winforms,所以我有一个关于在combobox中显示所有键盘键的快速问题。如何做,因为我不知道,我在谷歌上找不到任何关于这方面的信息,所以我来这里寻求帮助。我知道我必须这样做: foreach(string Key in Keyboard){ combobox1.Items.Add(Key); } 是列出大多数PC键盘扫描码的enum(请注意,扫描码不一定直接映射到物理键) 将它们加载到组合框很简单。我建议在组合框中使用数据绑定,以避免相同的枚举值使用不同的名称(使用两个值共享的名称呈现)所导致的问题 c

所以我有一个关于在combobox中显示所有键盘键的快速问题。如何做,因为我不知道,我在谷歌上找不到任何关于这方面的信息,所以我来这里寻求帮助。我知道我必须这样做:

foreach(string Key in Keyboard){ combobox1.Items.Add(Key); }
是列出大多数PC键盘扫描码的
enum
(请注意,扫描码不一定直接映射到物理键)

将它们加载到组合框很简单。我建议在组合框中使用数据绑定,以避免相同的枚举值使用不同的名称(使用两个值共享的名称呈现)所导致的问题

class键项
{
公共静态IReadOnlyList{get;}=CreateList();
私有静态IReadOnlyList CreateList()
{
String[]names=Enum.GetNames(typeof(System.Windows.Forms.Keys));
Key[]values=Enum.GeValues(typeof(System.Windows.Forms.Keys));
返回可枚举
.范围(0,名称.长度)
.Select(i=>newkeyitem(值[i],名称[i]))
.ToList();
}
私钥项(密钥、字符串名称)
{
this.KeyCode=key;
this.Name=Name??抛出新的ArgumentNullException(nameof(Name));
}
公钥密钥码{get;}
公共字符串名称{get;}
}
comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;
comboBox1.DisplayMember=nameof(KeyItem.Name);
comboBox1.ValueMember=nameof(KeyItem.KeyCode);
comboBox1.DataSource=KeyItem.List;
comboBox1.SelectedIndex=0;

没有单一的键盘键列表。考虑不同的键盘布局(美国101布局与英国102布局)或不同的键盘制造商添加他们自己的自定义按钮(例如我的罗技键盘有额外的宏键和媒体键)。那么您实际想要显示什么呢?我想要显示所有默认键,比如(A、B、C、D、{ENTER}、{BACKSPACE})和其他
class KeyItem
{
    public static IReadOnlyList<KeyItem> List { get; } = CreateList();

    private static IReadOnlyList<KeyItem> CreateList()
    {
        String[] names  = Enum.GetNames( typeof(System.Windows.Forms.Keys) );
        Key[]    values = Enum.GeValues( typeof(System.Windows.Forms.Keys) );

        return Enumerable
            .Range( 0, names.Length )
            .Select( i => new KeyItem( values[i], names[i] ) )
            .ToList();
    }

    private KeyItem( Key key, String name )
    {
        this.KeyCode = key;
        this.Name    = name ?? throw new ArgumentNullException(nameof(name));
    }

    public Key    KeyCode { get; }
    public String Name    { get; }
}

comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.DisplayMember = nameof(KeyItem.Name);
comboBox1.ValueMember   = nameof(KeyItem.KeyCode);
comboBox1.DataSource    = KeyItem.List;
comboBox1.SelectedIndex = 0;