Winform MenuStrip 更改选择背景色

一、自定义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 Backgrounds
        protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
        {           
            if (e.Item.IsOnDropDown)
            {
                if (e.Item.Selected == true && e.Item.Enabled)
                {
                    DrawMenuDropDownItemHi
### 使用 C# WinForms 中 MenuStrip 控件 MenuStrip 是 Windows Forms 应用程序中常用的菜单栏控件,允许开发者创建直观易用的应用程序菜单结构。通过 MenuStrip 可以为应用程序添加文件、编辑和其他标准命令选项。 #### 创建和配置 MenuStrip 控件 为了在窗体上显示一个菜单条,在设计视图中可以从工具箱拖放 `MenuStrip` 到窗体内[^3]: ```csharp // 在 Form 的构造函数或 Load 事件处理程序中初始化 MenuStrip private void InitializeMenu() { // 创建一个新的 MenuStrip 对象 var menuStrip = new MenuStrip(); // 添加顶级菜单项 (例如 文件, 编辑) ToolStripMenuItem fileToolStripMenuItem = new ToolStripMenuItem("文件"); ToolStripMenuItem editToolStripMenuItem = new ToolStripMenuItem("编辑"); // 向 File 菜单项添加子项 ToolStripMenuItem newItem = new ToolStripMenuItem("新建", null, NewItem_Click); ToolStripMenuItem openItem = new ToolStripMenuItem("打开", null, OpenItem_Click); // 将子项加入到父级菜单项 fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripMenuItem[] { newItem, openItem }); // 把顶级菜单项加到 MenuStripmenuStrip.Items.Add(fileToolStripMenuItem); menuStrip.Items.Add(editToolStripMenuItem); // 设置当前窗体的 MainMenuStrip 属性指向新创建的对象 this.MainMenuStrip = menuStrip; } ``` 上述代码片段展示了如何动态地向表单添加一个带有两个顶层项目的菜单条,并给这些项目分配了相应的点击事件处理器方法[^1]。 #### 处理菜单项点击事件 对于每一个希望响应用户交互动作的菜单项都需要为其指定对应的事件处理器。这可以通过匿名委托或者命名的方法完成。下面的例子说明了怎样定义简单的事件处理器来回应 “新建” 和 “打开” 动作: ```csharp private void NewItem_Click(object sender, EventArgs e) { MessageBox.Show("您选择了 新建 命令."); } private void OpenItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if(openFileDialog.ShowDialog() == DialogResult.OK){ string filePath = openFileDialog.FileName; // 执行打开文件逻辑... } } ``` 以上实现了基本的功能——当用户选择“新建”时弹出消息框;而选择“打开”则启动对话框让用户挑选要加载的文档[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值