繁体   English   中英

自定义 ToolStripMenuItem

[英]Customize ToolStripMenuItem

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

请帮我。 谢谢。

这不是用ToolStripMenuItem完成的方式。 您为MenuStrip提供了自定义渲染器。 示例代码在此线程中

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM