要更改
MenuItem
的背景颜色,您需要指定一个绘制项处理程序,并为每个项设置owner-draw为true。此外,为了使颜色实际占用一些空间,您需要实现一个MeasureMenuItem处理程序。
例如:
color.MenuItems.Add(new MenuItem("#123456", menuHandler));
color.MenuItems.Add(new MenuItem("Green", menuHandler));
color.MenuItems.Add(new MenuItem("Red", menuHandler));
foreach (MenuItem item in color.MenuItems)
{
item.OwnerDraw = true;
item.DrawItem += item_DrawItem;
item.MeasureItem += MeasureMenuItem;
}
以上代码将项目和它们的处理程序连接起来。
void item_DrawItem(object sender, DrawItemEventArgs e)
{
MenuItem cmb = sender as MenuItem;
string color = SystemColors.Window.ToString();
if (e.Index > -1)
{
color = cmb.Text;
}
if (checkHtmlColor(color))
{
e.DrawBackground();
e.Graphics.FillRectangle(new SolidBrush(ColorTranslator.FromHtml(color)), e.Bounds);
e.Graphics.DrawString(color, new Font("Lucida Sans", 10), new SolidBrush(ColorTranslator.FromHtml(color)), e.Bounds);
}
}
上面的代码将 MenuItem 的内容转换为颜色,创建一个矩形并绘制它。
void MeasureMenuItem(object sender, MeasureItemEventArgs e)
最后,以上几行代码只是测量 MenuItem 在绘制前应该占据的区域(基本上测量其字符串内容的空间),以便 draw_item 处理程序知道需要占用多少空间。