Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以覆盖ToolStripSystemRenderer以更改下拉背景的颜色,而不更改ToolStripBackground颜色?_C#_Winforms - Fatal编程技术网

C# 我是否可以覆盖ToolStripSystemRenderer以更改下拉背景的颜色,而不更改ToolStripBackground颜色?

C# 我是否可以覆盖ToolStripSystemRenderer以更改下拉背景的颜色,而不更改ToolStripBackground颜色?,c#,winforms,C#,Winforms,我创建了一个继承ToolStripSystemRenderer的类,并添加了重写的各种事件,以按照我想要的方式设置toolstrip的样式。但是,如果不更改toolstrip本身的背景色,我似乎无法更改按钮下拉菜单的背景 这是菜单的一个例子。我想改变系统的颜色 目前,我的渲染器类非常简单 public class AvertToolStripRenderer : ToolStripSystemRenderer { protected override void OnRenderTool

我创建了一个继承ToolStripSystemRenderer的类,并添加了重写的各种事件,以按照我想要的方式设置toolstrip的样式。但是,如果不更改toolstrip本身的背景色,我似乎无法更改按钮下拉菜单的背景

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

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

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);
    }
}

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

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

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);
        }
    }
}

啊。我没有意识到我必须将ToolStrip转换为ToolStrip下拉列表。我猜所有的子控件都继承自ToolStrip?这很有效。谢谢
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);
        }
    }
}