动态绑定右键菜单控件

一、动态绑定右键菜单控件       

        /// <summary>
        /// 通过递归获取执行控件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="c"></param>
        /// <param name="acction"></param>
        private void actionSetContextMenuStrip<T>(Control c, Action<T> acction) where T : Control
        {
            if (c is T)
            {
                if (acction != null)
                {
                    acction((T)c);
                }
            }
            else
            {
                foreach (Control item in c.Controls)
                {
                    actionSetContextMenuStrip<T>(item, acction);
                }

            }
        }

二、调用

  System.Windows.Forms.ContextMenuStrip cms2 = new System.Windows.Forms.ContextMenuStrip();

 ToolStripMenuItem tsmiShowFixedValue = new ToolStripMenuItem() { Text = "查看默认标识的元素" };
            tsmiShowFixedValue.BackColor = PublicColor.MyColorTeeL;
            Action<Object, EventArgs> actionShowFixedValue = (o, e) =>
            {
                actionShowClear(o, e);
            };
            tsmiShowFixedValue.Click += new EventHandler(actionShowFixedValue);
            cms2.Items.Add(tsmiShowFixedValue);

           //绑定右键菜单
            actionSetContextMenuStrip<Panel>(this.panelOperate, (c) =>
            {
                c.ContextMenuStrip = cms2;
            });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 MFC 中 ListCtrl 控件右键菜单代码: 在 CMyListCtrl 类中添加以下成员变量: ```cpp CMenu m_menu; ``` 在 CMyListCtrl 类的 OnInitDialog 函数中添加以下代码: ```cpp // 加载菜单资源 m_menu.LoadMenu(IDR_MENU); // 获取列表控件的句柄 CWnd* pWnd = GetDlgItem(IDC_LIST); // 将菜单资源绑定到列表控件上 pWnd->Attach(GetDlgItem(IDC_LIST)->m_hWnd); // 设置列表控件的风格 DWORD dwStyle = GetWindowLong(GetDlgItem(IDC_LIST)->m_hWnd, GWL_STYLE); dwStyle |= LVS_SHOWSELALWAYS; SetWindowLong(GetDlgItem(IDC_LIST)->m_hWnd, GWL_STYLE, dwStyle); // 绑定右键菜单消息 pWnd->ModifyStyle(0, LVS_OWNERDRAWFIXED); pWnd->ModifyStyle(0, LVS_REPORT); pWnd->ModifyStyle(0, LVS_SHOWSELALWAYS); pWnd->ModifyStyle(0, LVS_EDITLABELS); pWnd->ModifyStyle(0, LVS_NOSORTHEADER); pWnd->ModifyStyle(0, LVS_SINGLESEL); pWnd->ModifyStyle(0, LVS_SHAREIMAGELISTS); pWnd->ModifyStyle(0, LVS_OWNERDATA); pWnd->ModifyStyle(0, LVS_AUTOARRANGE); // 设置列表控件菜单 pWnd->SetMenu(&m_menu); ``` 在 CMyListCtrl 类中添加以下消息响应函数: ```cpp void CMyListCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { // 获取列表控件的句柄 CWnd* pList = GetDlgItem(IDC_LIST); if (pWnd->m_hWnd == pList->m_hWnd) { // 在列表控件右键菜单 m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } } ``` 在资源文件中添加菜单资源 IDR_MENU,其中包含右键菜单的各个菜单项。 以上就是 MFC 中 ListCtrl 控件右键菜单的代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值