Index: class/Managed.Windows.Forms/System.Windows.Forms/Control.cs
===================================================================
--- class/Managed.Windows.Forms/System.Windows.Forms/Control.cs	(revision 74019)
+++ class/Managed.Windows.Forms/System.Windows.Forms/Control.cs	(working copy)
@@ -3892,7 +3892,11 @@
 			switch (msg.Msg) {
 				case (int)Msg.WM_SYSKEYDOWN:
 				case (int)Msg.WM_KEYDOWN: {
-					key_event = new KeyEventArgs ((Keys)msg.WParam.ToInt32 ());
+					Keys key_data = (Keys)msg.WParam.ToInt32 ();
+#if NET_2_0
+					OnPreviewKeyDown (new PreviewKeyDownEventArgs (key_data));
+#endif
+					key_event = new KeyEventArgs (key_data);
 					OnKeyDown (key_event);
 					return key_event.Handled;
 				}
@@ -5457,6 +5461,14 @@
 			}
 		}
 
+#if NET_2_0
+		protected virtual void OnPreviewKeyDown(PreviewKeyDownEventArgs e) {
+			PreviewKeyDownEventHandler eh = (PreviewKeyDownEventHandler)(Events [PreviewKeyDownEvent]);
+			if (eh != null)
+				eh (this, e);
+		}
+#endif
+
 		[EditorBrowsable(EditorBrowsableState.Advanced)]
 		protected virtual void OnQueryContinueDrag(QueryContinueDragEventArgs e) {
 			QueryContinueDragEventHandler eh = (QueryContinueDragEventHandler)(Events [QueryContinueDragEvent]);
