Как начать работу с C# для тестирования нажатия клавиш?

Я довольно новичок в C#, и первое, что я хочу сделать, это познакомиться с этой средой, попробовав Key Combination Events. В частности, alt + k. Я работаю над Microsoft Visual C# 2010 Express. Я хочу проверить, работает ли этот код. Если ошибки найдены, пожалуйста, сообщите мне:)

public void begin(object sender, KeyEventArgs ev)
{
    if (ev.KeyCode == Keys.K && ev.Modifiers == Keys.Alt)
    {
        //display a message
    }
}

но даже если я теоретически знаю, какие модели проектов предлагаются при нажатии на новый проект и как они используются, я безуспешно пытался протестировать этот код на нескольких моделях. Короче говоря, я не знаю, какие модели выбрать и где разместить код для тестирования такого рода простого кода, а точнее, работы с событиями (клавиша + мышь) с минималистским интерфейсом. Кто-то может помочь мне рассказать мне, как конкретно начать работать с событиями в C#? Заранее спасибо:)

2 ответа

Решение

Документация MSDN содержит хороший пример того, что вам нужно сделать. Вот несколько важных частей:

  • Начните с простого приложения "Windows Forms". В то время как есть много других типов приложений, WinForms является самым простым для начала.
  • Подключите событие KeyPress. В конструкторе Form вы должны указать ему, что делать, когда он получает событие KeyPress. Если вы измените название своей функции begin в вашем вопросе выше, чтобы Form1_KeyPress (чтобы более точно описать, что он делает), следующий код должен работать:

    this.KeyPress += new KeyPressEventHandler(Form1_KeyPress);

  • использование KeyPressEventArgs вместо KeyEventArgs , Это может иметь или не иметь огромное значение, но это хорошо, чтобы использовать наиболее конкретные EventArgs когда вы можете, так что вы можете использовать свойства, специфичные для него.

  • Обрати внимание на KeyPressEventArgs.Handled , Если у вас есть KeyPress (или некоторые другие клавиатурные события) на других объектах в ваших формах, таких как кнопки или текстовые поля, вам нужно указать, обрабатывалось ли событие там или оно должно всплывать до родительского (в вашем случае, чтобы форма).

РЕДАКТИРОВАТЬ (Спасибо @RBarryYoung):

  • Задавать this.KeyPreview = true в конструкторе формы. Чтобы ваша форма получала события клавиатуры, которые происходят на дочерних элементах управления (например, на кнопках и текстовых полях), как указано в подсказке, расположенной непосредственно над этим, вам нужно установить для этого свойства значение true чтобы форма впервые увидела события клавиатуры, происходящие с дочерним элементом. (Примечание: конечно, этот совет и предыдущий применимы только в том случае, если вы хотите, чтобы форма видела эти события. Иногда вы можете захотеть, чтобы сочетания клавиш помещались в дочерний элемент управления, а не обрабатывались в родительском элементе.)

Это может помочь вам:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.K && this.AcceptButton == null)
    {
        MessageBox.Show("Key K pressed");
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

Он обнаружит, нажата ли клавиша K в каком-либо элементе управления вашей формы, и вернет сообщение msgbox

Проверьте это и попробуйте сделать работу по-своему.

Другие вопросы по тегам