private void WmMenuChar(ref Message message) { Menu menu = contextMenu.FindMenuItem(MenuItem.FindHandle, message.LParam); if (contextMenu.Handle == message.LParam) { menu = contextMenu; } if (menu != null) { char key = char.ToUpper((char)((int)message.WParam & 0x0000FFFF), CultureInfo.InvariantCulture); int index = 0; foreach (MenuItem menuItem in menu.MenuItems) { if ((menuItem != null) && (menuItem.OwnerDraw) && (menuItem.Mnemonic == key)) { message.Result = (IntPtr)((NativeMethods.MNC_EXECUTE << 16) | index); return; } if (menuItem.Visible) { index++; } } } }