自定义样式实现菜单和工具栏的分割线

来源:互联网 发布:怎么不自动更新软件 编辑:程序博客网 时间:2024/05/16 05:30

转自:http://www.2cto.com/kf/201009/75123.html

在做WinForm界面布局时,菜单和工具栏必不可少!但是MenuStrip和ToolStrip不能够对边框的样式直接设置,如果想实现菜单和工具栏之间的分割线就不容易实现;今天查阅了一下msdn找到了一个方法,和大家一块分享,如果有更好的办法的话可以贴出来,共同进步;
首先,创建一个CustomProfessionalRenderer类(类名可随便定义)继承自ToolStripProfessionalRenderer。代码如下:

/// <summary>    /// 自定义菜单工具栏样式    /// </summary>    class CustomProfessionalRenderer : ToolStripProfessionalRenderer    {        //重载ToolStripProfessionalRenderer类的OnRenderToolStripBorder方法        protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)        {            base.OnRenderToolStripBorder(e);            ControlPaint.DrawBorder(                e.Graphics,                e.AffectedBounds,                SystemColors.ControlDarkDark,                 0, ButtonBorderStyle.None,                 SystemColors.Control,                 1,                ButtonBorderStyle.Solid,                 SystemColors.ControlDarkDark,                 0,                 ButtonBorderStyle.None,                 SystemColors.ControlDark,                 0,                 ButtonBorderStyle.None);        }    }



然后,通过设置MenuStrip或ToolStrip的Renderer属性就ok了。代码如下:

private void MainForm_Load(object sender, EventArgs e){    this.toolStrip1.Renderer = new CustomProfessionalRenderer();}



最后,需要注意的是如果设置MenuStrip的边框的话,效果不是很好,因为子菜单的边框和控件的主边框都会使用该样式绘制;这样会造成重复,因此建议设置ToolStrip的样式!