diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/ToolStripDropDownItem.cs b/src/System.Windows.Forms/src/System/Windows/Forms/ToolStripDropDownItem.cs index ac4ad79adce..7a25f206bae 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/ToolStripDropDownItem.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/ToolStripDropDownItem.cs @@ -542,12 +542,12 @@ protected internal override bool ProcessDialogKey(Keys keyData) { Keys keyCode = (Keys)keyData & Keys.KeyCode; + // Items on the overflow should have the same kind of keyboard handling as a toplevel + bool isTopLevel = (!IsOnDropDown || IsOnOverflow); + if (HasDropDownItems) { - // Items on the overflow should have the same kind of keyboard handling as a toplevel - bool isToplevel = (!IsOnDropDown || IsOnOverflow); - - if (isToplevel && (keyCode == Keys.Down || keyCode == Keys.Up || keyCode == Keys.Enter || (SupportsSpaceKey && keyCode == Keys.Space))) + if (isTopLevel && (keyCode == Keys.Down || keyCode == Keys.Up || keyCode == Keys.Enter || (SupportsSpaceKey && keyCode == Keys.Space))) { ToolStrip.s_selectionDebug.TraceVerbose("[SelectDBG ProcessDialogKey] open submenu from toplevel item"); @@ -561,7 +561,7 @@ protected internal override bool ProcessDialogKey(Keys keyData) return true; } - else if (!isToplevel) + else if (!isTopLevel) { // if we're on a DropDown - then cascade out. bool menusCascadeRight = (((int)DropDownDirection & 0x0001) == 0); @@ -583,6 +583,14 @@ protected internal override bool ProcessDialogKey(Keys keyData) } } } + else + { + // For a top-level item without sub-items: do nothing on Up/Down + if (isTopLevel && (keyCode == Keys.Down || keyCode == Keys.Up)) + { + return true; + } + } if (IsOnDropDown) {