我是否可以覆盖ToolStripSystemRenderer来更改下拉列表背景的颜色,而无需更改工具条背景颜色?

时间:2014-07-14 00:14:27

标签: c# winforms

我创建了一个继承ToolStripSystemRenderer的类,并添加了覆盖各种事件来按我想要的方式设置工具条的样式。但我似乎无法改变按钮的下拉菜单的背景,而无需更改工具条本身的背景颜色。

这是菜单的一个示例。我想改变那种系统颜色。

enter image description here

我的渲染器类目前非常简单。

public class AvertToolStripRenderer : ToolStripSystemRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        //base.OnRenderToolStripBorder(e);
    }
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        e.TextColor = Color.Black;
        base.OnRenderItemText(e);
    }
    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
    {
        e.ArrowColor = Color.White;
        base.OnRenderArrow(e);
    }
}

1 个答案:

答案 0 :(得分:3)

您需要设置工具条的渲染器(以防您忘记此细节):

YourToolstrip.Renderer = new AvertToolStripRenderer();

您的自定义渲染器类的下一步:

public class AvertToolStripRenderer : ToolStripProfessionalRenderer
{
    //rest of your implementation...

    protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
    {
        ToolStripDropDown dr = e.ToolStrip as ToolStripDropDown;

        if (dr != null)
        {
            e.Graphics.FillRectangle(Brushes.Beige, e.AffectedBounds);
        }
    }
}