A working solution:
- Register for
MouseWheel
, Opened
, Closed
event of your ToolStripDropDown
in the Load event of the form
dropDown.Opened+= new EventHandler(dropDown_Opened);
dropDown.Closed+= new ToolStripDropDownClosedEventHandler(dropDown_Closed);
dropDown.MouseWheel+= new MouseEventHandler(dropDown_MouseWheel);
- Add the code for Keyboard class which simulate key presses
public static class Keyboard
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern uint keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
const byte VK_UP = 0x26; // Arrow Up key
const byte VK_DOWN = 0x28; // Arrow Down key
const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag, the key is going to be pressed
const int KEYEVENTF_KEYUP = 0x0002; //Key up flag, the key is going to be released
public static void KeyDown()
{
keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
}
public static void KeyUp()
{
keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
}
}
- Add the code for
Opened
, Closed
, MouseWheel
events:
bool IsMenuStripOpen = false;
void dropDown_MouseWheel(object sender, MouseEventArgs e)
{
if (IsMenuStripOpen)
{
if (e.Delta > 0)
{
Keyboard.KeyUp();
}
else
{
Keyboard.KeyDown();
}
}
}
void dropDown_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
IsMenuStripOpen = false;
}
void dropDown_Opened(object sender, EventArgs e)
{
IsMenuStripOpen = true;
}
- Create global functionality for all systems for item 1
void dropDownMenuScrollWheel(ToolStripDropDown dropDown)
{
dropDown.Opened +=new EventHandler(dropDown_Opened);
dropDown.Closed +=new ToolStripDropDownClosedEventHandler(dropDown_Closed);
dropDown.MouseWheel += new MouseEventHandler(dropDown_MouseWheel);
}
ToolStripDropDown is ToolStripMenuItem.DropDown
Hope it help you.