自定义ToolStripMenuItem

时间:2010-04-12 03:46:12

标签: c# .net

我想通过重写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

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:1)

这不是使用ToolStripMenuItem完成的方式。您为MenuStrip提供自定义渲染器。示例代码位于this thread

答案 1 :(得分:1)

使用 OnRenderMenuItemBackground() 的问题在于它适用于整个菜单,而不仅仅是一个 ToolStripMenuItem。

代码中的错误在于 Rectangle r = this.Bounds;产生错误的区域。将此更改为 Rectangle r = e.ClipRectangle ,它应该可以正常工作。 (由于某种原因,Bounds 有错误的 Y 分量)。