There's many ways of doing this. If you want to catch these in your derivative class, override OnKeyDown. External to your class, handle the KeyDown event. This is to catch and potentially "handle" the key without it being passed to the target window. If you don't care about stopping it from being dispatched, you can handle either KeyPress or KeyUp. In there, you actually use the KeyEventArgs - not the EventArgs like the other response mentioned - to get the Keys enumeration member for pressed keys, or just the ASCII character value itself. See the documentation for the KeyEventArgs members for more details. If you want to catch keys throughout your application (say, for configurable hot keys), implement the IMessageFilter class and add your implementing using Application.AddMessageFilter. You get a Message structure that contains the message (such as WM_KEYDOWN) and you can get the data from the WParam and LParam properties. You can also return true to signal that you've handled it and the message should not be dispatched.
Microsoft MVP, Visual C# My Articles