You can catch the keys in ProcessKeyPreview. You would want to check for the enter key and for the m.Msg value as this can possibly be hit multiple times (KeyDown, KeyPress, KeyUp).
protected override bool ProcessKeyPreview(ref Message m)
{
bool enter = (((Keys)m.WParam.ToInt32()) & Keys.Enter) == Keys.Enter;
if(enter)
{
Console.WriteLine(m);
}
return base.ProcessKeyPreview(ref m);
}
If you add a Windows Forms DataGrid to your form, you will also see that ProcessDialogKey is not hit for that control either. I think the reason is that the it is really the embedded controls like TextBoxes that have the input focus at this point.