给Winform添加右键菜单

最近用到DotNetBar的SuperTabControl,发现SuperTabItem木有右键菜单,也不是继承于Control的,ContextMenu属性就没法设置了,只好自己手动加了,不多废话,直接上代码吧。

 

using System;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;

namespace DevComponents.DotNetBar
{
    //继承SuperTabItem
    public class SuperTabItemDev : SuperTabItem
    {
        //定义委托
        public delegate void MenuItemClickHandler(
            object sender, ToolStripItemClickedEventArgs toolStripItemClickedEventArgs);

        //定义对应事件
        public event MenuItemClickHandler myMenuItemClick;

       //是否启用上下文菜单
        private bool _IsShowContextMenu = false;
        public bool IsShowContextMenu
        {
            get { return _IsShowContextMenu; }
            set
            {
                _IsShowContextMenu = value;
                if (value)
                {
                   //设置右键事件,显示上下文菜单
                    this.MouseUp += SuperTabItemDev_MouseUp;
                    _Menu = this.ContextMenuStrip;
                  //设置点击菜单选项后的事件绑定
                    _Menu.ItemClicked += MenuOnItemClicked;
                }
                else
                {
                   //移除绑定信息
                    this.MouseUp -= SuperTabItemDev_MouseUp;
                    _Menu.ItemClicked -= MenuOnItemClicked;
                    _Menu = null;
                }
            }
        }

        //上下文菜单的 Getter/Setter
        public ContextMenuStrip _Menu;

        public ContextMenuStrip ContextMenuStrip
        {
            get
            {
                //默认Get的时候就创建了,也可以外围Set添加
                if (_Menu == null)
                {
                    _Menu = new ContextMenuStrip();

                    ToolStripMenuItem UpdateNameToolStripMenuItem = new ToolStripMenuItem();

                    UpdateNameToolStripMenuItem.Name = "UpdateNameToolStripMenuItem";
                    UpdateNameToolStripMenuItem.Size = new System.Drawing.Size(124, 22);
                    UpdateNameToolStripMenuItem.Text = "修改名称";

                    _Menu.Items.AddRange(new ToolStripItem[] { UpdateNameToolStripMenuItem});
                    _Menu.Name = "contextMenuStrip1";
                    _Menu.Size = new System.Drawing.Size(125, 26);

                }
                return _Menu;
            }
            set
            {
                _Menu = value;
            }
        }
   
        //右键设置显示上下文菜单
        void SuperTabItemDev_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //这个显示的位置,根据实现的情况,使用PointToScreeen,我这里是使用的Y车轴是不变的
                this.ContextMenuStrip.Show(new Point(e.X, e.Y+70));
            }
        }

        //点击菜单项后,分发事件出去
        private void MenuOnItemClicked(object sender, ToolStripItemClickedEventArgs toolStripItemClickedEventArgs)
        {
            this.ContextMenuStrip.Hide();
            if (myMenuItemClick != null)
            {
                myMenuItemClick(sender, toolStripItemClickedEventArgs);
            }

            //MessageBox.Show("You had selected 修改!");
        }
    }
}

 

//代码调用

SuperTabItemDev  item = new SuperTabItemDev();

  item.IsShowContextMenu = true;
  item.myMenuItemClick += item_myMenuItemClick;

        private void item_myMenuItemClick(object sender, ToolStripItemClickedEventArgs toolStripItemClickedEventArgs)
        {
            MessageBox.Show("你已经点击 --> 修改!");
        }

虽然很简单的东西,不过可以一起分享与学习也不错~

 

 

posted @ 2014-04-19 08:59  Marksion  阅读(1565)  评论(0编辑  收藏  举报