我想通过重写OnPaint函数来自定义ToolStripMenuItem。这是一个MyToolStripMenuItem:
public class MyToolStripMenuItem : ToolStripMenuItem
{
public MyToolStripMenuItem()
:base()
{
}
public MyToolStripMenuItem(string t)
:base(t)
{
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle r = this.Bounds;
g.FillRectangle(Brushes.Blue, r);
g.DrawString(this.Text, this.Font, Brushes.Red, r);
}
}
在我的代码中,我将在项目的边界填充蓝色。现在,我将在menustrip上创建一个项目列表:
MyToolStripMenuItem1
| ___ MyToolStripMenuItem2
| ___ MyToolStripMenuItem3
我不知道为什么MyToolStripMenuItem3没有蓝色背景。
这是我的源代码:
http://www.mediafire.com/?2qhmjzzfzzn
请帮帮我。感谢。
答案 0 :(得分:1)
这不是使用ToolStripMenuItem完成的方式。您为MenuStrip提供自定义渲染器。示例代码位于this thread。
答案 1 :(得分:1)
使用 OnRenderMenuItemBackground() 的问题在于它适用于整个菜单,而不仅仅是一个 ToolStripMenuItem。
代码中的错误在于 Rectangle r = this.Bounds;产生错误的区域。将此更改为 Rectangle r = e.ClipRectangle ,它应该可以正常工作。 (由于某种原因,Bounds 有错误的 Y 分量)。