DevExpress 的帮助文档是在太缺乏了,他自己的帮助只有简单描述,没有样例,而它的网站上的在线帮助只有利用它的设计器设计的ToolBar、PopupMenu ,没有利用代码开发的。
虽然要利用代码开发,可以参照它设计器背后的代码,但还是有些区别的。我最近就碰见了问题:
我通过反射初始化BarButtonItem,BarSubItem按钮实例,最后在主程序把这些按钮加到ToolBar上:
在用反射实例化BarSubItem时,要用该方法:
                        BarSubItem newItem = new BarSubItem();
                        newItem.Name = intMenuItemCount.ToString();
                        newItem.Id = intMenuItemCount++;
 newMenu.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo((BarItem)item, beginGroup));
这里要注意:
1、Id必须唯一。
2、不要使用newMenu.AddItem((BarItem)item),这个方法会引起很多问题,如:beginGroup菜单分组无法实现, 我试图通过以下方法实现,但还是徒劳,而且有些编辑菜单不能使用该方法,如:BarToolbarsListItem工具栏列表菜单                   
                         BarItemLink itemLink = newMenu.AddItem((BarItem)item);
                          itemLink.BeginGroup = beginGroup;
3、在将实例化的BarSubItem加到ToolBar以后,还要递归把BarSubItem以及它的子菜单加入BarManager。
 private void AddMenuItem(DevExpress.XtraBars.BarItem menuItem)
        {
            if (menuItem != null)
            {
                //如果是编辑框工具条时使用
                if (menuItem is BarEditItem)
                {
                    this.BarMenuManager.RepositoryItems.Add((menuItem as BarEditItem).Edit);
                }
                this.BarMenuManager.Items.Add(menuItem);
                if (menuItem is DevExpress.XtraBars.BarSubItem)
                {
                    DevExpress.XtraBars.LinksInfo linksInfo = (menuItem as DevExpress.XtraBars.BarSubItem).LinksPersistInfo;
                    for (int i = 0; i < linksInfo.Count; i++)
                    {
                        AddMenuItem((BarItem)linksInfo[i].Item);
                    }
                }
            }
4、如果右键菜单也是通过反射实现的,那么在加载右键菜单时需要注意:
 public PopupMenu CreateContextMenu
{
             PopupMenu contextMenu = new PopupMenu();
                contextMenu.Popup += new EventHandler(ContextMenuPopupHandler);
            foreach (object item in buildItems)
                {
                    if (item is BarItem)
                    {
                        bool beginGroup = false;
                        beginGroup = (bool)(item as BarItem).Tag;

//contextMenu.LinksPersistInfo.AddRange(new LinkPersistInfo[] { new LinkPersistInfo((item as             BarItem),         beginGroup) });
                        BarItem barItem = item as BarItem;
                      
                       
                        AddMenuItem(barManager, barItem);
                        //用LinksPersistInfo右键菜单不出来
                        //contextMenu.LinksPersistInfo.Add(new LinkPersistInfo(barItem, beginGroup));
                        BarItemLink itemLink = contextMenu.AddItem(barItem);
                        itemLink.BeginGroup = beginGroup;
                    }
                }
                contextMenu.Manager = barManager; 
            return contextMenu;
}
//在此方法中注意 BarItemLink itemLink = (menuItem as BarSubItem).AddItem(item);此方法看似又多加了菜单,但实际不然,如果不用该方法,右键菜单中的菜单有子菜单时会无法显示。我就是让这个问题耗了我很多事间

private void AddMenuItem(DevExpress.XtraBars.BarManager barManager,DevExpress.XtraBars.BarItem menuItem)
        {
            if (menuItem != null)
            {             
                barManager.Items.Add(menuItem);
                if (menuItem is DevExpress.XtraBars.BarSubItem)
                {
                    DevExpress.XtraBars.LinksInfo linksInfo = (menuItem as DevExpress.XtraBars.BarSubItem).LinksPersistInfo;
                    int count = linksInfo.Count;
                    for (int i = 0; i < count; i++)
                    {
                        BarItem item = (BarItem)linksInfo[i].Item;
                        item.Manager = barManager;

BarItemLink itemLink = (menuItem as BarSubItem).AddItem(item);
                        itemLink.BeginGroup = linksInfo[i].BeginGroup;
                        AddMenuItem(barManager, item);
                    }
                }
            }
        }

转载于:https://www.cnblogs.com/supermap/archive/2006/07/01/440418.html

DevExpress 组件ToolBar、PopupMenu 使用有感相关推荐

  1. DevExpress 组件源代码,图表、报告、数据透视表

    DevExpress 组件源代码,图表.报告.数据透视表 DevExpress WinForms 订阅附带一整套受 Office 启发的用户界面组件.从我们屡获殊荣的数据网格和功能区到我们的 Exce ...

  2. 如何卸载安装有问题的devexpress组件?

    因为delphi7是32位版本,所以重devexpressvcl 15版本以上的组件不再支持delphi7,本例中使用的版本是14.2.2 下载:https://download.csdn.net/d ...

  3. DevExpress组件之——TreeList组件

    由于是第一次接触到第三方控件DevExpress中的TreeList,对其进行了进一步的研究,采用递归算法实现.做下自己熟悉第三方控件的整个过程,为和我一样处理于起步阶段的同仁们提供个参考,以下为最终 ...

  4. ajax自动加载blogjava和博客园的rss

    自动加载blogjava和博客园的rss <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   "h ...

  5. DevExpress部分使用技巧(转存) -- 轻舞肥羊

    KeyLife富翁笔记  作者: 轻舞肥羊 标题: DevExpress部分使用技巧(原创) 关键字: DevExpress,cxGrid 分类: 开发技巧 密级: 公开 (评分:★★★★ , ...

  6. 001.android初级篇之ToolBar

    官方的最新support library v7中提供了新的组件ToolBar,用来替代之前的ActionBar,实现更为弹性的设计在 material design 也对之做了名称的定义:App ba ...

  7. Toolbar详解 · Material Design Part 2

    文章转载地址:https://zhuanlan.zhihu.com/p/22842375 Toolbar详解 · Material Design Part 2 1 年前 这是一个系列文章,在这个系列里 ...

  8. DevExpress v17.2新版亮点——XAF篇

    2019独角兽企业重金招聘Python工程师标准>>> 用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了eXpr ...

  9. react事件 组件设计传参使用

    1.事件 和原生js事件一致 事件命名用驼峰式 onclick onClick onmouseover onMouseover 事件总是要响应一个函数 render() {return ( <d ...

最新文章

  1. 计算机网络Rip例题,计算机网络技术习题
  2. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享
  3. amd cpu排行_【每日热点】长盈精密成功开发纽扣电池壳体组件;AMD处理器全球份额有望达到20%;英伟达承诺将ARM总部留在英国...
  4. 京东也不甘当当后!买书4折优惠!
  5. 图的基本运算及智能交通中的最佳路径选择问题
  6. js实现上传图片及时预览
  7. EMLOG仿微信主题模板V3.11
  8. scut协议配置工具初始化的一些问题
  9. mongodb索引 多健索引
  10. (转)一种可以穿透还原卡和还原软件的代码
  11. 联想用u盘重装系统步骤_联想笔记本Y470 U盘重装系统过程教程
  12. JavaScript 数组方法大全
  13. 疫情背后,零售变革正在酝酿,手机行业或迎来线下大洗牌
  14. QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用
  15. 新美大 java待遇_入我新美大的Java后台开发面试题总结
  16. 大于4G的文件无法拷贝到U盘
  17. VisionPro脚本详解
  18. 【转】我的大学六年(单片机大师郭天祥原创)
  19. 中文核心期刊、科技核心期刊、CSCD核心期刊区别
  20. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度

热门文章

  1. matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形
  2. linux查看xml文件的配置,3、kvm虚拟机日常管理与配置
  3. Spark下的word2vec模型训练
  4. 2021住房消费品质服务报告
  5. 分享一篇关于饿了么的需求文档
  6. QQ 调查用户是否希望推 「已读」功能,如何评价「已读」功能?QQ是否要加这个功能?...
  7. java signal handler_JAVA优雅停机的实现
  8. 需求、需求工程与需求工程师 — 4. 咨询能力的要求
  9. 作者:黄媛洁(1992-),女,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院硕士生...
  10. 【Python】处理FutureWarning: Pass threshold=18 as keyword args.