Как я могу отобразить все клавиши клавиатуры в Combobox - PullRequest
0 голосов
/ 20 марта 2020

Итак, у меня есть быстрый вопрос об отображении всех клавиш клавиатуры в выпадающем списке. Как это сделать, потому что я понятия не имею, и я не могу найти что-либо об этом в Google, поэтому я здесь для некоторой помощи. Я знаю, что должен сделать что-то вроде:

foreach(string Key in Keyboard){ combobox1.Items.Add(Key); }

1 Ответ

0 голосов
/ 20 марта 2020

System.Windows.Forms.Keys - это enum, в котором перечислены большинство P C кодов сканирования клавиатуры (обратите внимание, что коды сканирования не обязательно отображают 1: 1 непосредственно на физические клавиши).

Загрузить их в ComboBox просто. Я рекомендую использовать DataBinding с ComboBox, чтобы избежать проблем, вызванных одинаковыми значениями перечисления с разными именами (которые будут отображаться с именем, общим для обоих значений).

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...