From MSDN
When this property is set to true, the
form will receive all KeyPress,
KeyDown, and KeyUp events. After the
form's event handlers have completed
processing the keystroke, the
keystroke is then assigned to the
control with focus. For example, if
the KeyPreview property is set to true
and the currently selected control is
a TextBox, after the keystroke is
handled by the event handlers of the
form the TextBox control will receive
the key that was pressed. To handle
keyboard events only at the form level
and not allow controls to receive
keyboard events, set the
KeyPressEventArgs.Handled property in
your form's KeyPress event handler to
true.
You can use this property to process
most keystrokes in your application
and either handle the keystroke or
call the appropriate control to handle
the keystroke. For example, when an
application uses function keys, you
might want to process the keystrokes
at the form level rather than writing
code for each control that might
receive keystroke events.
Basically when you set it to true, your form can process key events as well as your controls.
E.G User presses K key, the forms event handlers are called(Key Down, Key Up, Key Pressed) and then the event handlers on the currently active control are called.
EDIT: No there are no disadvantages or nasty suprises. The only thing i can think of is a very tiny performance decrease as it needs to check for event handles on the form for each KeyDown,KeyUp, KeyPressed. Apart from that unless you're adding event handlers to the form, and doing something that might cause problems. you're perfectly fine. If you don't need to globally handle key events except on controls then I would suggest you leave this as false to prevent the extra checks. On modern PC's this wouldnt have a visible difference.