【问题标题】:Get the Number of Keys on Keyboard C#获取键盘 C# 上的键数
【发布时间】:2020-11-09 00:07:57
【问题描述】:

我试图列出 WPF ListBox 中的所有键:

foreach (Key key in Enum.GetValues(typeof(Key)))
            {
                lb.Items.Add(key.ToString());
            }

但这并没有返回键(A,...,Escape,Enter)。它返回 None,Cancel,Back,...

【问题讨论】:

    标签: c# wpf for-loop keyboard key


    【解决方案1】:

    您可以获得enum 名称而不是值

    foreach (string key in Enum.GetNames(typeof(Key)))
    {
        lb.Items.Add(key);
    }
    

    或者您可以显示组合的名称和值。类似于 Visual Studio 显示的元数据。

    System.Collections.IEnumerator keys = Enum.GetValues(typeof(Key)).GetEnumerator();
    foreach (string key in Enum.GetNames(typeof(Key)))
    {
        keys.MoveNext();
        lb.Items.Add(key + " = " + (int)keys.Current);
    }
    

    【讨论】:

    • 我想列出 A、B、C、leftShift、Enter、LeftControl、numP5、F1... 而不是取消、下一步、执行
    • @MusicGrotesqueTV 您可以使用不需要的密钥创建一个集合,并将其从添加到列表中排除。
    【解决方案2】:

    这是一个使用纯 XAML 的解决方案

    ...
    <Window.Resources>
        <ObjectDataProvider x:Key="KeysValues" MethodName="GetValues" ObjectType="{x:Type system:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="Key"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding Source={StaticResource KeysValues}}"/>
    </Grid>
    ...
    

    【讨论】:

    • 正如您在我的回答中看到的,一些 enum 键具有非唯一的数值。结果,.ToString() 为某些键返回相同的名称,例如Return 将重复两次。因此,输出将与实际的 Key 名称不同。
    • @如果你想返回枚举名称而不是枚举值,只需将MethodName="GetValues"更改为MethodName="GetNames"
    猜你喜欢
    • 2011-12-17
    • 2011-08-03
    • 1970-01-01
    • 2019-06-02
    • 2012-07-01
    • 2020-01-26
    • 1970-01-01
    • 2019-04-09
    • 2011-03-28
    相关资源
    最近更新 更多