title: Key Events: ProcessCmdKey
body: <p>I am trying to get some keyboard response happening on a little test Windows Form Application, and I have a rough solution, which is to override ProcessCmdKey. However, there are several issues I am encountering, and inconsistencies I am finding.</p>
  
  <p><strong>Different Events:</strong> Is there a way to tell, in the arguments <code>ref Message msg, Keys keyData</code>, whether the even is a KeyDown, a KeyUp, or a KeyPress?</p>
  
  <p><strong>KeyPress:</strong> Everywhere I have looked says that KeyPress, ie a repeated keyboard input, only happens for character keys, which the arrow keys are not. However, the event handler is being called as frequently, and in the same mannor/with the same behaviour, for the arrow keys as character keys. Is this in face a KeyPress event, or is it something else?</p>
  
  <p>I would ideally like a way to handle, at form level, all keyboard events without letting them get passed to the controls on the form. However, all the documentation sufficiently confused me, and missed key points, so that I have not been able to complete this.</p>
  
  <p>Help on any of these topics is appreciated. Thanks!</p>