В вашем коде несколько ошибок.
MainWindow.KeyPress = new KeyPressEventArgs(Form_KeyPress);
1) KeyPress
имеет тип KeyPressEventHandler
. Не KeyPressEventArgs
. В C# классы, которые называются ...EventArgs
, обычно используются как специальные объекты, которые содержат данные о возбужденном событии, и они наследуются от системного класса EventArgs
. И классы, которые вызывают ...EventHandlers
, обычно определяют оболочку для делегатов и вызываемых событий.
2) Таким образом, KeyPress
является событием. Если вы хотите подписаться на это событие, вы должны использовать оператор +=
. И метод, который вы хотите указать в качестве обработчика, должен иметь подпись void(object, KeyPressEventArgs)
. Типичная подпись для событий: void(object, ...EventArgs)
private void Form_KeyPress(object sender, System.Windows.Forms.KeyEventArgs e)
3) Как я уже говорил, этот метод имеет неправильную подпись (KeyPressEventArgs
вместо KeyEventArgs
).
4) Должно быть static
. Вы не можете использовать не-stati c членов класса в методе stati c.
Поэтому ваш код должен выглядеть следующим образом:
class PracticeEvent
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
Form MainWindow = new Form();
MainWindow.Text = "Practice";
MainWindow.MaximizeBox = false;
MainWindow.MinimizeBox = false;
MainWindow.FormBorderStyle = FormBorderStyle.FixedSingle;
MainWindow.StartPosition = FormStartPosition.CenterScreen;
MainWindow.Size = new Size(1000, 700);
MainWindow.KeyPreview = true;
MainWindow.KeyPress += Form_KeyPress;
MainWindow.ShowDialog();
}
private static void Form_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
{
MessageBox.Show("You pressed the A key.");
}
}
}
Использовать слушателей в C# не хорошая практика, но некоторые фреймворки используют ее. Обычно используются события и обратные вызовы.
И мой последний совет. Может быть, вы хотите использовать событие KeyDown
? KeyPress
используется для работы с вводом символов.