From MSDN documentation on the Keys enumeration:
The Keys class contains constants for processing keyboard input. The members of the Keys enumeration consist of a key code and a set of modifiers combined into a single integer value. In the Win32 application programming interface (API) a key value has two halves, with the high-order bits containing the key code (which is the same as a Windows virtual key code), and the low-order bits representing key modifiers such as the SHIFT, CONTROL, and ALT keys.
Converting these constants to char is meaningless, since you will lose valuable information and the constant values do not correspond to ASCII character codes.
From MSDN concerning the KeyChar property of KeyPressEventArgs:
You cannot get or set the following keys (...) INSERT and DELETE (...)
KeyChar returns the char value (ASCII character code) corresponding to pressed key, not its (raw) key code. Therefore you cannot detect various special keys and cannot compare the value to the Keys enumeration constants.
Use the KeyCode property of KeyEventArgs instead. Since it is of type Keys, not char, it is well suited for your purpose. In order to access this information, you will have to handle the KeyDown event instead of the KeyPress event.
By the way, according to the MSDN page on the Control KeyPress event, this event is not raised for non-character keys at all:
The KeyPress event is not raised by noncharacter keys; however, the noncharacter keys do raise the KeyDown and KeyUp events.