• DevExpress控件使用小结


    1.TextEditor(barEditItem)取文本
    string editValue = barEditItem1.EditValue.ToString();    //错误,返回null
     
    string editValue = ((DevExpress.XtraEditors.TextEdit)barEditItem).EditValue.ToString();    //正确,返回文本框内容
    2.ComboBoxEdit(barEditItem)添加Item
    string item = "comboboxItem1";
    ((DevExpress.XtraEditors.Repository.RepositoryItemComboBox)this.barEditItem.Edit).Items.Add(item);
    3.ComboBoxEdit(barEditItem)取文本
    string itemValue = this.barEditItem.EditValue.ToString();
     
    4.Ribbon控件
     
    //添加Page
    DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage = new RibbonPage();
    ribbonControl.Pages.Add(ribbonPage);
    //添加Group
    DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup = new RibbonPageGroup();
    ribbonPage.Groups.Add(ribbonPageGroup);
    //添加Button
    DevExpress.XtraBars.BarButtonItem barButtonItem = new BarButtonItem();
    ribbonPageGroup.ItemLinks.Add(barButtonItem);
    //添加barSubItem
    DevExpress.XtraBars.BarSubItem barSubItem = new BarSubItem();
    ribbonPageGroup.ItemLinks.Add(barSubItem);
    //barSubItem下添加Button
    barSubItem.AddItem(barButtonItem);
     
     
    //奇怪的删除Page问题
    while (this.ribbonControl.Pages.Count > 0)
    {
         ribbonControl.Pages.Remove(ribbonControl.Pages[0]);    //调试正常,运行报异常
    }
    while (this.ribbonControl.Pages.Count > 0)
    {
         ribbonControl.SelectedPage = ribbonControl.Pages[0];
         ribbonControl.Pages.Remove(ribbonControl.SelectedPage); //运行正常
    }
    //禁止F10键Tips
    ribbonControl.Manager.UseF10KeyForMenu = false;
    //DX按钮
    ApplicationIcon属性改变图标
    右键 Add ApplicationMenu 添加evExpress.XtraBars.Ribbon.ApplicationMenu
     
    5.HitInfo
     
    //在Tab页上点击右键的事件响应
    void xtraTabbedMdiManager_Event(object sender, MouseEventArgs e)
    {
         if (e.Button == MouseButtons.Right && ActiveMdiChild != null)
         {
              DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hInfo = xtraTabbedMdiManager.CalcHitInfo(e.Location);
              //右键点击位置:在Page上且不在关闭按钮内
              if (hInfo.IsValid && hInfo.Page != null && !hInfo.InPageCloseButton)
              {
                   this.popupMenu.ShowPopup(Control.MousePosition);//在鼠标位置弹出,而不是e.Location
              }
         }
    }
    //在ribbon上点击右键的事件响应
    private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)
    {
        //禁掉原系统右键菜单
        e.ShowCustomizationMenu = false;
        //右键位置:在barButtonItem上
        if (e.HitInfo != null
         && e.HitInfo.InItem
         && e.HitInfo.Item.Item is BarButtonItem)
        {
             this.popupMenu.ShowPopup(Control.MousePosition);
        }
        //右键位置:在barSubItem中的barButtonItem上
        else if (e.Link != null
              && e.Link.Item != null
              && e.Link.Item is BarButtonItem)
        {
             this.popupMenu.ShowPopup(Control.MousePosition);
        }
    }
     
    6.皮肤
     
    //添加皮肤程序集后注册皮肤
    DevExpress.UserSkins.OfficeSkins.Register();
    DevExpress.UserSkins.BonusSkins.Register();
    //设置皮肤
    DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Liquid Sky");    //若皮肤名称错误则按系统默认设置(第一个皮肤)
    //GalleryFilterMenuPopup事件设置弹出筛选菜单的“All Groups”为中文
    private void rgbiSkins_GalleryFilterMenuPopup(object sender, GalleryFilterMenuEventArgs e)
    {
        e.FilterMenu.ItemLinks[n].Caption = "所有皮肤";    //n=分组数+1
    }
    //GalleryInitDropDownGallery事件设置弹出皮肤列表的表头“ALL Groups”为中文
    private void rgbiSkins_GalleryInitDropDownGallery(object sender, InplaceGalleryEventArgs e)
    {
        e.PopupGallery.FilterCaption = "所有皮肤";
    }
     
    7.dockManager
     
    将视图的状态信息保存到xml文件
    dockManager1.SaveLayoutToXml("..\\UserConfig\\ViewInfo.xml");
    导出xml中保存的状态信息
    dockManager1.RestoreLayoutFromXml("..\\UserConfig\\ViewInfo.xml");
     
    8.barManager
     
    设置bar的字体与系统字体
    barAndDockingController1.AppearancesBar.ItemsFont = new Font(this.Font.FontFamily, currentFontSize);
     
    9.设置系统字体
     
    DevExpress.Utils.AppearanceObject.DefaultFont = new Font(this.Font.FontFamily, currentFontSize);
     
    10.treeView
     
    为tree节点加右键菜单并选中该节点
            private void treeList1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    DevExpress.XtraTreeList.TreeListHitInfo hi = treeList1.CalcHitInfo(e.Location);
                    if (hi.Node != null && hi.Node.ImageIndex == 5) //叶子节点的ImageIndex == 5
                    {
                        TreeListNode node = treeList1.FindNodeByID(hi.Node.Id);
                        treeList1.FocusedNode = node;
     
                        this.popupMenu1.ShowPopup(MousePosition);
                    }
                }
            }
     
     
    一、皮肤
      DexExpress的控件都有自己的样式,有不少的皮肤,然而怎样让一个System.Windows.Forms.Form窗口换肤了,有没有办法呢?用DexExpress是没有什么简单办法的,如果你要让窗体都换肤,只有用DevExpress.XtraEditors.XtraForm一条路了。用它后,还需在Pragram.cs中的Application.Run之前写上一句:DevExpress.Skins.SkinManager.EnableFormSkins();这样就差不多了。点此处见参考资料!
      二、样式设置有诀窍
      DexExpress的控件都有一个LookAndFeel属性,这个属性有两个属性:SkinName、Style,但是,我们如果只设置这两个,结果设置来设置去都没有反映,这是怎么回事,DexExpress说,去看Demo吧,日,看demo是大海捞针啊,那么多属性,谁晓得是哪儿出了问题。。怎么解决呢?LookAndFeel还有一个UseDefaultLookAndFeel属性,它默认值是true,请将它设为false即可。这是什么原因呢?为什么要这么做呢?DexExpress有一个组件:DefaultLookAndFeel,它的用法是拖到窗体上就是了,然后你修改它的LookAndFeel属性就是了,修改了它,那么此窗体上所有UseDefaultLookAndFeel为true的控件都用上了相同的样式。DevExpress的这个思想是蛮好的。这样做好处极大,再也不用一个控件一个控件地设置。有个别例外,就单独设置。
      另外,我还注意到DevExpress有几个类似的控件,如:
      DefaultToolTipControler、StyleController。它们的用意都集体管理界面风格。
      点此处进见参考资料!
      三、DexExpress的工具栏、菜单
      微软的的工具栏、菜单栏太难看了。让人烦闷。DexExpress也有。怎么使用呢?也有一些要注意的地方,这些问题demo都不会主动告诉我们的。
      从工具栏上拖个DevExpress.XtraBars.BarManage,拖上去后,它会自动生成三条DevExpress.XtraBars.Bar。DexExpress中,工具栏跟菜单是一个东西,都是建立在DevExpress.XtraBars.Bar基础之上,DevExpress.XtraBars.Bar是工具栏图标、菜单项的容器。它上面写得明白:add,让你点它,点它就可以创建菜单项、工具栏按钮等等。但是,我遇到了麻烦,相信大伙跟我一样,新建了一个以后,你输入了名称,按道理,你在其他地方点击一下,就相当于确认创建了,但是,我发现,无论你鼠标怎么动,vs失去了响应。后来才搞清楚,原来要回车一下。这种确认方式跟以前的习惯很不一样。我还以为vs死了。
                  //禁止barManage右键显示
                  this.barManager1.AllowCustomization = false;       
                  this.barManager1.AllowShowToolbarsPopup = false;
                  //去除barManage右边小三角 自定制
                  this.barManager1.AllowQuickCustomization = false;
    
      四、选项卡式子窗口
      这个问题在前面已经讲了,但是还有一个问题,怎样实现双击选项卡时就关闭对应的窗口呢?就你Maxthon一样。我也去看了XtraTabbedMdiManager的事件,只有mouseUp、mouseDown。经过一篇文章的启发,得到了正确的解决方法(点此处看参考资料):
      第一步:在XtraTabbedMdiManager所在mdi父窗体中定义一个变量:
      private int clickTick = 0;
      第二步:注册事件xtraTabbedMdiManager1_MouseDown,事件处理代码如下:
    /// <summary>
    /// 双击标签关闭窗口
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e)
    {
    DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hi = xtraTabbedMdiManager1.CalcHitInfo(new Point(e.X, e.Y));
    if (hi.HitTest == DevExpress.XtraTab.ViewInfo.XtraTabHitTest.PageHeader)
    {
    if (clickTick == -1 || (System.Environment.TickCount - clickTick) > SystemInformation.DoubleClickTime)
    {
    clickTick = System.Environment.TickCount;
    }
    else
    {
    if ((System.Environment.TickCount - clickTick) < SystemInformation.DoubleClickTime)
    {
    //MessageBox.Show("DoubleClick: " + hi.Page.Text);
    this.ActiveMdiChild.Close();
    }
    clickTick = -1;
    }
    }
    }
      原理简单,是通过计算两个mouseDown之间的时间差来达到识别双击的目的。
      五、NotifyIcon的问题
      用了dev的菜单后,当然不能再去用ContextMenuStrip。如果用了ContextMenuStrip,那么软件里面有两种风格的菜单,多不雅观啊。所以只能用devexpress带的菜单了,dev提供三种菜单:
      DevExpress.XtraBars.Bar、ApplicationMenu、PopupMenu
      这三者当然就只能用PopuMenu了。怎么做托盘。DevExpress中并没有提供,只能微软的了。但是NotifyIcon只能绑定到ContextMenuStrip,受群里兄弟的启发,手工显示出来。问题解决,代码如下:
      popupMenu1.ShowPopup(Cursor.Position);
      这句代码写在NotifyIcon的mouseup事件中,不能用e.x,e.y的方法取坐标,它们都返回0。注意,popupMenu只有在BarManage存在的时候才能编辑,所以还是要先拖个BarManage。
    补充:
    修改ribbon图标
    选择 ribbon 控件,修改 ribbon.ApplicationIcon
     
    对话框的使用
        对话框#region 对话框
            /// <summary>
            /// 确认对话框
            /// </summary>
            /// <param name="strString">提示内容</param>
            /// <returns>用户点击结果</returns>
            public DialogResult Confirm(string strString)
            {
                return DevExpress.XtraEditors.XtraMessageBox.Show(strString,"提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
            }
            /// <summary>
            /// 确认对话框
            /// </summary>
            /// <param name="strSting">提示内容</param>
            public void ShowMessage(string strSting)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show(strSting,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            /// <summary>
            /// 确认删除对话框
            /// </summary>
            /// /// <returns>用户点击结果</returns>
            public DialogResult ConfirmDelete()
            {
                return DevExpress.XtraEditors.XtraMessageBox.Show("确定要删除吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
            }
            #endregion
    使用用例:
    if(this.Confirm("确定要删除吗?") == DialogResult.Cancel)
                    return;
  • 相关阅读:
    LVS DR实验!
    Memcached 与 Redis 区别
    LVS笔试题!
    并发编程拓展知识
    并发编程之协程
    并发编程之线程
    并发编程之多道技术
    粘包问题与socketserver实现并发
    套接字通信
    git的使用
  • 原文地址:https://www.cnblogs.com/iplaycode/p/3405345.html
Copyright © 2020-2023  润新知