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);
                    }
                }
            }
        }

barManager.Menu(barSubItem)的更多相关文章

  1. How to easily create popup menu for DevExpress treelist z

    http://www.itjungles.com/how-to-easily-create-popup-menu-for-devexpress-treelist.html Adding popup m ...

  2. Devexpress之barManager

    隐藏菜单栏左边的竖线和右边的箭头? 1.隐藏菜单栏上右边的箭头属性设置:OptionsBar=>>AllowQuickCustomization=False 2.隐藏菜单栏左边的竖线属性设 ...

  3. Devexpress之barManager控件属性

    隐藏菜单栏左边的竖线和右边的箭头? 1.隐藏菜单栏上右边的箭头属性设置:OptionsBar=>>AllowQuickCustomization=False 2.隐藏菜单栏左边的竖线属性设 ...

  4. Dev BarManager使用方法

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking 近期使用BarManager时候.发现一个问题就是在一開始把BarManager控件拖到窗口上的时 ...

  5. Android Studio —— 创建Menu菜单项

    大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:

  6. [转]NopCommerce How to add a menu item into the administration area from a plugin

    本文转自:http://docs.nopcommerce.com/display/nc/How+to+code+my+own+shipping+rate+computation+method Go t ...

  7. Vertical Menu ver4

    以前一直使div来创建Vertical菜单,也曾有过3个版本.http://www.cnblogs.com/insus/archive/2011/10/19/2217314.html 现今Insus. ...

  8. 菜单(Menu)的三中创建方式——Android开发之路2

    菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...

  9. jQuery ui autocomplete 与easyUI冲突解决办法(重命名ui的autocomplete 和menu部分)

    http://jqueryui.com/download/   UI定制只选autocomplete 会自动把依赖的menu模块也加入进来--然而easyUI也有自己的menu,于是就-- 折腾了好久 ...

随机推荐

  1. IOS 定位 单例

    + (SCLocationController *)sharedController { static SCLocationController *sharedController = nil; st ...

  2. Old Sorting(转化成单调序列的最小次数,置换群思想)

     Old Sorting Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit S ...

  3. Java凝视Annotation

     Java凝视Annotation 从JDK 5開始,Java添加了对元数据(MetaData)的支持,也就是Annotation(凝视).Annotation提供了一种为程序元素设置元数据的方法 ...

  4. cocos2d-x结合cocosbuilder,不同屏幕适配小结

    这个问题搞了好几天才解决,在此总结一下: 首先约定只使用一套图片资源同时应用于iphon4和iphon5(测试过在ipad下也能显示正常), 这里我们将需要全屏显示的背景制作为iphon5的尺寸即:1 ...

  5. LoadRunner性能测试中Controller场景创建需注意的几点

    在LR工具做性能测试中,最关键的一步是Controller场景的设计,因为场景的设计与测试用例的设计相关联,而测试用例的执行,直接影响最终的测试结果是怎么的,因此,我们每设计一种场景,就有可能是一个测 ...

  6. nginx日志格式

    日志格式 log_format main '$remote_addr - $remote_user [$time_local] $request '                    '" ...

  7. 那些 Cynthia 教我的事 之 PMSec (一)

    一.ViewState的使用 在项目中,我一直在用Common的方法读取一些信息,但是Cynthia习惯将它存入ViewState中. ViewState 它是由ASP.NET页面框架管理的一个隐藏的 ...

  8. django学习笔记二:一个项目多个App项目搭建

    django充许在一个项目中存在多个app,如一个大门户网站中可以包含论坛,新闻等内容,其中每一个模块称之为一个App,也可以理解为一个个独立的小型项目最终集成在一个门户网站中最终呈现给用户 本次测试 ...

  9. Failed to create the Java Virtual Machine (Myeclipse或者eclipse启动报错)

    把某几个值改为原来的0.5倍就ok了(我就这么解决的)   eclipse.ini如下:   -startupplugins/org.eclipse.equinox.launcher_1.2.0.v2 ...

  10. Integer to Roman(JAVA)

    public String intToRoman(int num) { int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[ ...