If you set the Form.KeyPreview to true like I said, Form.OnKeyDown would be
called for both arrow and other keys.
One thing I didn't mention is, there is an exception to this rule. If Focus
is on a control deriving from ButtonBase (i.e. Button, RadioButton etc.),
then arrow keys would be used to set the focus to previous (with left and up
arrow keys) and to next (with right and down arrow keys) control. In this
case, Form.OnKeyDown is not called since these keystrokes are interpreted as
Shift+Tab and Tab, respectively.
The approach I'm describing is the preferred way for a container form to
catch some key strokes on its children controls. If you go to documentation
for Control.ProcessCmdKey at msdn:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx
You will see it says:
"Controls will seldom, if ever, need to override this method."
But if the exception I described above is something you don't want,
overriding ProcessCmdKey may be the only way to go. If that's the case, I
would recommend reading the documentation and returning correct values from
this method as told there.