日期:2014-05-17  浏览次数:21387 次

ToolStripMenuItem Click 后获得 SourceControl 问题
在一个listbox中,ContextMenuStrip 被绑定了一个多级的ToolStripMenuItem菜单。
经过网上的一些方法,在第一级下可以获得这个菜单所属的控件。但是多级下就获取不到了。
求办法


------解决方案--------------------
试下这个代码,虽然已经实现了你要的功能,还没有做得很完善,有点BUG,不影响简单的使用。


    public static class ContextMenuStripHelper
    {
        public static event ContextMenuStripItemClickedEventHandler ItemClick;

        static Dictionary<ContextMenuStrip, ContextMenuStripState> _menus;
        
        public static void InitializeHelper(this ContextMenuStrip menu)
        {
            if (menu == null)
                throw new ArgumentNullException("menu");

            if (_menus == null)
                _menus = new Dictionary<ContextMenuStrip, ContextMenuStripState>();

            if (!_menus.ContainsKey(menu))
            {
                WireEvents(menu);
                _menus.Add(menu, new ContextMenuStripState());
            }
        }

        static void ContextMenuStrip_Disposed(object sender, EventArgs e)
        {
            ContextMenuStrip menu = (ContextMenuStrip)sender;