C# ContextMenuStrip、MenuStrip控件创建主菜单与子菜单

一、ContextMenuStrip创建主菜单与子菜单

using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Data;

namespace MenuStripExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //给控件添加Opening事件
            this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenu1_Popup);
            //给具体哪个控件添加菜单显示(这里给到整个窗体)
            this.ContextMenuStrip = contextMenuStrip1;
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            //创建菜单
            CreateMenu();
        }

        //主菜单
        protected ToolStripItem[] _menuItem;
        //子菜单(Two)
        private ToolStripItem[] _subMenuTwo;


        /// <summary>
        /// 菜单枚举
        /// </summary>
        private enum MenuIndex
        {
            One = 0,
            Two = 2
        }

        /// <summary>
        /// 创建菜单
        /// </summary>
        protected virtual void CreateMenu()
        {
            _menuItem = new ToolStripItem[]
            {
                new ToolStripMenuItem("One",null,Sumu_Click)
                , new ToolStripSeparator()
                , new ToolStripMenuItem("Two", null, _subMenuTwo)
            };
        }

        private void ContextMenu1_Popup(object sender, CancelEventArgs e)
        {   
            //判断是否有Two这个菜单项
            if (_menuItem.Where(x => x.Text == "Two").Any())
            {
                //如果子菜单(_subMenuTwo)没有值时取值
                if (_subMenuTwo == null || !_subMenuTwo.Any())
                {
                    //从数据库拿子菜单
                    //DataTable dt = new DataTable();
                    //ToolStripItem[] tsArr = new ToolStripItem[dt.Rows.Count];
                    //int count = 0;
                    //foreach (DataRow dr in dt.Rows)
                    //{
                    //    tsArr[count] = new ToolStripMenuItem(string.Concat(dr["数据1"], "-", dr["数据2"].ToString()), null, Sumu_Click);
                    //    count += 1;
                    //}
                    //_subMenuTwo = tsArr;

                    ToolStripItem[] tsArr = new ToolStripItem[1];
                    tsArr[0] = new ToolStripMenuItem(string.Concat("Two", "-", "One").ToString(), null, Sumu_Click);
                    _subMenuTwo = tsArr;

                    var menu = (ToolStripMenuItem)MainMenu(MenuIndex.Two);
                    menu.DropDownItems.Clear();
                    menu.DropDownItems.AddRange(_subMenuTwo);
                }
            }

            //整体更新到控件
            {
                var withBlock = contextMenuStrip1.Items;
                withBlock.Clear();
                withBlock.AddRange(_menuItem);
            }
        }

        /// <summary>
        /// 返回对应下标菜单
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        private ToolStripItem MainMenu(MenuIndex index)
        {
            return _menuItem[(int)index];
        }

        /// <summary>
        /// 菜单点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Sumu_Click(object sender, EventArgs e)
        {
            string text = ((ToolStripMenuItem)sender).Text;
            MessageBox.Show("Sumu_Click:" + $"{text}", "SUMU", MessageBoxButtons.OKCancel);
        }
    }
}

效果图如下:



二、MenuStrip创建主菜单与子菜单

private void Form1_Load(object sender, EventArgs e)
{

    // 添加菜单项
    ToolStripMenuItem fileMenuItem = new ToolStripMenuItem();
    fileMenuItem.Text = "文件";

    ToolStripMenuItem newMenuItem = new ToolStripMenuItem();
    newMenuItem.Text = "新建";
    newMenuItem.Click += NewMenuItem_Click;
    fileMenuItem.DropDownItems.Add(newMenuItem);

    ToolStripMenuItem openMenuItem = new ToolStripMenuItem();
    openMenuItem.Text = "打开";
    openMenuItem.Click += OpenMenuItem_Click;
    fileMenuItem.DropDownItems.Add(openMenuItem);

    // 添加子菜单项
    ToolStripMenuItem saveMenuItem = new ToolStripMenuItem();
    saveMenuItem.Text = "保存";
    saveMenuItem.Click += SaveMenuItem_Click;
    fileMenuItem.DropDownItems.Add(saveMenuItem);

    // 将菜单项添加到菜单栏
    menuStrip1.Items.Add(fileMenuItem);

    // 关联菜单栏和窗体
    //MainMenuStrip = menuStrip1;

    //也可同上面ContextMenuStrip控件一样
    //CreateMenu();
    //menuStrip1.Items.AddRange(_menuItem);
}

private void NewMenuItem_Click(object sender, EventArgs e)
{
    MessageBox.Show("点击了新建菜单项");
}

private void OpenMenuItem_Click(object sender, EventArgs e)
{
    MessageBox.Show("点击了打开菜单项");
}

private void SaveMenuItem_Click(object sender, EventArgs e)
{
    MessageBox.Show("点击了保存菜单项");
}

效果图如下:


posted @ 2024-03-13 17:42  苏沐~  阅读(956)  评论(0编辑  收藏  举报