一、自定义MenuStrip render

项目时,觉得自带菜单项选中颜色与项目不匹配,想要更改,多方查询总结出方法。

初始化时 将this.menustrip1.render=new myselfrender();设置为自己重写的render类。

public class CustomProfessionalRenderer:ToolStripProfessionalRenderer{Font textFont = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));private Color menuItemSelectedColor = Color.Gray;private Color menuItemBorderColor = Color.Black;/// <summary>/// Initialize a new instance of the Visual Studio MenuBarRenderer class./// </summary>public CustomProfessionalRenderer(): base(new MenuBarColor()){this.menuItemSelectedColor = Color.LightSteelBlue;this.menuItemBorderColor = Color.LightSteelBlue;}protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e){e.TextFont = textFont;base.OnRenderItemText(e);}#region Backgroundsprotected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e){           if (e.Item.IsOnDropDown){if (e.Item.Selected == true && e.Item.Enabled){DrawMenuDropDownItemHighlight(e);}}else{base.OnRenderMenuItemBackground(e);}}protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e){ToolStrip toolStrip = e.ToolStrip;Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.HighQuality;//抗锯齿Rectangle bounds = e.AffectedBounds;LinearGradientBrush lgbrush = new LinearGradientBrush(new Point(0, 0), new Point(0, toolStrip.Height), Color.FromArgb(200, Color.FromArgb(48,61,69)), Color.FromArgb(200, Color.FromArgb(48, 61, 69)));if (toolStrip is MenuStrip){//由menuStrip的Paint方法定义 这里不做操作}else if (toolStrip is ToolStripDropDown){int diameter = 10;//直径GraphicsPath path = new GraphicsPath();Rectangle rect = new Rectangle(Point.Empty, toolStrip.Size);Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));path.AddLine(0, 0, 10, 0);// 右上角arcRect.X = rect.Right - diameter;path.AddArc(arcRect, 270, 90);// 右下角arcRect.Y = rect.Bottom - diameter;path.AddArc(arcRect, 0, 90);// 左下角arcRect.X = rect.Left;path.AddArc(arcRect, 90, 90);path.CloseFigure();toolStrip.Region = new Region(path);g.FillPath(lgbrush, path);}else{base.OnRenderToolStripBackground(e);}}protected override void OnRenderImageMargin(ToolStripRenderEventArgs e){// base.OnRenderImageMargin(e);}#endregion#region DrawMenuDropDownItemHighlightprivate void DrawMenuDropDownItemHighlight(ToolStripItemRenderEventArgs e){Rectangle rect = new Rectangle();rect = new Rectangle(2, 0, (int)e.Graphics.VisibleClipBounds.Width - 4, (int)e.Graphics.VisibleClipBounds.Height - 1);using (SolidBrush brush = new SolidBrush(menuItemSelectedColor)){e.Graphics.FillRectangle(brush, rect);}using (Pen pen = new Pen(menuItemBorderColor)){e.Graphics.DrawRectangle(pen, rect);}}#endregion}public class MenuBarColor : ProfessionalColorTable{Color ManuBarCommonColor = Color.LightSteelBlue;Color SelectedHighlightColor = Color.FromArgb(253, 244, 191);Color MenuBorderColor = Color.White;Color MenuItemBorderColor = Color.FromArgb(48,61,69);Color MenuStripbg = Color.Transparent;/// <summary>/// Initialize a new instance of the Visual Studio MenuBarColor class./// </summary>public MenuBarColor(){}#region/ <summary>/  获取选中除顶级 System.Windows.Forms.ToolStripMenuItem 之外的 System.Windows.Forms.ToolStripMenuItem 时,要使用的纯色。/ </summary>//public override Color MenuItemSelected//{//    get//    {//        return SelectedHighlightColor;//    }//}/// <summary>///  被按下时使用的渐变的开始颜色/// </summary>public override Color MenuItemPressedGradientBegin{get{return MenuStripbg;}}/// <summary>/// 被按下时使用的渐变的结束颜色/// </summary>public override Color MenuItemPressedGradientEnd{get{return MenuStripbg;}}/// <summary>/// 被按下时使用的渐变的中间颜色/// </summary>public override Color MenuItemPressedGradientMiddle{get{return MenuStripbg;}}/// <summary>/// 获取按钮被选定时使用的纯色/// </summary>public override Color ButtonSelectedHighlight{get{return ManuBarCommonColor;}}/// <summary>///  被选定时使用的渐变的开始颜色/// </summary>public override Color MenuItemSelectedGradientBegin{get{return ManuBarCommonColor;}}/// <summary>/// 被选定时使用的渐变的结束颜色/// </summary>public override Color MenuItemSelectedGradientEnd{get{return ManuBarCommonColor;}}/// <summary>/// MenuStrip 上使用的边框颜色/// </summary>public override Color MenuBorder{get{return MenuBorderColor;}}/// <summary>/// ToolStripMenuItem 的边框颜色/// </summary>public override Color MenuItemBorder{get{return MenuItemBorderColor;}}#endregion}

Winform MenuStrip 更改选择背景色相关推荐

  1. PhotoShop更改图片背景色

    PhotoShop更改图片背景色 操作步骤如下所示: 打开图片==>图像/调整/替换颜色==>选择颜色==>选择油漆桶工具==>点击需要被替换的图片背景色 注:不知道什么原因 ...

  2. 无法更改计算机背景色,Win10主题更改后背景色无法变更?这个设置麻烦禁用下...

    原标题:Win10主题更改后背景色无法变更?这个设置麻烦禁用下 喜欢追求个性化的用户会选择更改他们的Win10系统主题,以使他们的屏幕不再呆板统一.为了获得满意的结果,有时候还需要调整背景色.但是,一 ...

  3. 2020印象笔记更改笔记背景色护眼色方法

    先给大家看一下更改好后的效果 更改背景色操作,具体操作是: 先随便创建一个笔记,然后随便输入几个字,点击创建的笔记,右击,选择导出,然后导出为enex格式点击确定 然后右击导出的文件,打开方式中选择记 ...

  4. 匹配指定内容的div_HTML背景色教程–如何更改Div背景色,并通过代码示例进行了说明...

    作为Web开发人员,最常见的事情之一就是更改HTML元素的背景颜色.但是,如果您不了解如何使用CSS background-color属性,可能会产生混淆.在本文中,我们讨论以下几点 1.HTML元素 ...

  5. div背景色更改 闪烁_HTML背景色教程–如何更改Div背景色,并通过代码示例进行了说明

    div背景色更改 闪烁 One of the most common things you may have to do as a web developer is to change the bac ...

  6. C# WinForm 文件夹选择控件 folderBrowserDialog 的应用实例

    上期文章<使用 C# 修改文件创建时间>中有文件夹选择控件,但并没有提到如何使用,所以这次主要是针对这个控件讲下如何使用的一些细节.就两个动作,请看下图: 1.从工具箱中"双击& ...

  7. c语言vc怎么改变背景板颜色,vc6.0中更改对话框背景色和字体颜色

    方法一:设置所有窗口的颜色     MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该 ...

  8. C#WinForm程序中选择打印机打印

      之前写程序,调用Microsoft.Office.Interop.Word动态生成doc文档并打印. 由于在打印时直接实例化一个Word.Document对象,并使用其PrintOut()方 ...

  9. C# winform 打开文件选择对话框

    微软文档: https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.win32.openfiledialog?view=netframework-4 ...

最新文章

  1. Qt的Socket通信
  2. 隐含马尔可夫模型在语言处理中的应用(Z)
  3. Java的内置垃圾收集如何使您的生活更美好(大部分时间)
  4. 英语流利说 第32天
  5. 【Flink】flink并行度与kafka分区(partition)设置
  6. python找不到文件数据_如何用 Python 正确读取资源文件
  7. 三方应用集成_华为携手利尔达完成业界首个5G工业智能网关预商用集成验证
  8. nginx的配置笔记
  9. 一个人学的软件测试,到底有多难?
  10. 百度编辑器上传图片配置php,谁配置过百度编辑器ueditor1.4.3的图片上传路径?
  11. java文件写入blob_java程序向IQ写入blob(image)类型数据问题的解决
  12. Tomcat中文乱码解决
  13. Gyro陀螺仪 > MPU 6000 vs ICM 20689
  14. 在w ndoWS7中屏幕保护程序,怎么设置Windows 7屏幕保护时间
  15. 【绘制关系网络图】Gephi 入门使用
  16. 易捷行云EasyStack入选2021信创云TOP10
  17. 【SQL注入技巧拓展】————13、我的WafBypass之道(SQL注入篇)
  18. python图像倾斜校正_霍夫变换 文本图片倾斜矫正 python实现
  19. yolov5方框的颜色及粗细更改
  20. BadUSB的前世今生:USB RUBBER DUCKY和Teensy USB

热门文章

  1. CSS常用伪元素详解
  2. 股票l2接口与普通的l1区别在哪里?
  3. 基于人工智能技术的的拥塞控制的基本原理—— PCC Vivace
  4. 如何在UBUNTU虚拟机上编译EOS完成环境搭建?(附代码)
  5. let,const,let和use strict
  6. @RequestBody axios post请求400 bad request
  7. 【TP5源码】获取项目的根目录
  8. Detecting Unstable Periodic Orbits in Chaotic Experimental Data (解析)
  9. 北大全国计算机竞赛,学科竞赛第一名保送北大,和高考全国第一名进北大相比,谁更强?...
  10. 如何将Word快速转为PPT?