У меня был похожий вопрос, и я просмотрел много статей, много форумов, но не нашел идеального ответа на свои вопросы. У меня была проблема не только с наведением курсора на элементы выпадающего меню, но и с фоном и компоновкой, а также с тем, как можно добавить подэлементы программным способом. Затем я обнаружил, как можно легко настроить MenuStrip на форумах Stackoverflow, однако у меня все еще осталась проблема с выпадающими списками. Затем я выясняю, что ContextMenuStip обладает свойствами для достижения целей. Легко добавить любой MenuStrip ContextMenuStrip как меню DropDown. О, да: прелесть в том, что вам не нужно использовать какие-либо специальные компоненты.
Итак, шаги следующие:
- Вам нужно иметь таблицу цветов.
- Вы должны использовать его в MenuStrip.
- ToolStripMenuItems в вашем MenuStrip должен иметь ContextMenuStrip как DropDown.
- С помощью функции ToolStripMenuItems.Items [?]. DropDownItems вы можете легко управлять подэлементами, которые отображаются в виде раскрывающихся элементов.
1.- Таблицы цветов:
public class submenuColorTable : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return ColorTranslator.FromHtml("#302E2D"); }
}
public override Color MenuItemBorder
{
get { return Color.Silver; }
}
public override Color ToolStripDropDownBackground
{
get { return ColorTranslator.FromHtml("#21201F"); }
}
public override Color ToolStripContentPanelGradientBegin
{
get { return ColorTranslator.FromHtml("#21201F"); }
}
}
public class LeftMenuColorTable : ProfessionalColorTable
{
public override Color MenuItemBorder
{
get { return ColorTranslator.FromHtml("#BAB9B9"); }
}
public override Color MenuBorder //added for changing the menu border
{
get { return Color.Silver; }
}
public override Color MenuItemPressedGradientBegin
{
get { return ColorTranslator.FromHtml("#4C4A48"); }
}
public override Color MenuItemPressedGradientEnd
{
get { return ColorTranslator.FromHtml("#5F5D5B"); }
}
public override Color ToolStripBorder
{
get { return ColorTranslator.FromHtml("#4C4A48"); }
}
public override Color MenuItemSelectedGradientBegin
{
get { return ColorTranslator.FromHtml("#4C4A48"); }
}
public override Color MenuItemSelectedGradientEnd
{
get { return ColorTranslator.FromHtml("#5F5D5B"); }
}
public override Color ToolStripDropDownBackground
{
get { return ColorTranslator.FromHtml("#404040"); }
}
public override Color ToolStripGradientBegin
{
get { return ColorTranslator.FromHtml("#404040"); }
}
public override Color ToolStripGradientEnd
{
get { return ColorTranslator.FromHtml("#404040"); }
}
public override Color ToolStripGradientMiddle
{
get { return ColorTranslator.FromHtml("#404040"); }
}
}
2.- Использование его в MenuStrip:
menuStrip.Renderer = new ToolStripProfessionalRenderer(new LeftMenuColorTable());
3.- Добавление ContextMenuStrip к элементу меню программно
ContextMenuStrip CMS = new ContextMenuStrip()
{
Renderer = new ToolStripProfessionalRenderer(new submenuColorTable()),
ShowImageMargin = false
};
ToolStripMenuItem TSMI = new ToolStripMenuItem("Button name")
{
BackColor = sampleMenuItem.BackColor,
ForeColor = sampleMenuItem.ForeColor,
Font = sampleMenuItem.Font,
Margin = sampleMenuItem.Margin,
Padding = sampleMenuItem.Padding,
Size = sampleMenuItem.Size,
TextAlign = sampleMenuItem.TextAlign,
DropDown = CMS
};
menuStrip.Items.Add(TSMI);
4.- Управление подэлементами
Здесь вы можете управлять (например, добавлять) элементами выпадающего меню. Цвет, размер и другие свойства просто используются для тестирования. Вы можете использовать постоянные или разные значения. («i» - это индекс кнопки меню, который вы хотите добавить в записи)
ToolStripMenuItem newItem = new ToolStripMenuItem("Button Name", null, ToolStripMenuItem_Click)
{
Text = "Button Name",
BackColor = toolStripMenuItem01.BackColor,
ForeColor = toolStripMenuItem01.ForeColor,
Font = toolStripMenuItem01.Font,
Margin = toolStripMenuItem01.Margin,
Padding = toolStripMenuItem01.Padding,
Size = toolStripMenuItem01.Size
};
((ToolStripMenuItem)menuStrip.Items[i]).DropDownItems.Add(newItem);
Результат в моем случае следующий:
Это может быть полезно для других. Спасибо за прочтение! Удачного кодирования! :)