DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案

最近刚接触到 DevExpress 13.1 这个皮肤组件, 觉得相当好用 于是开始准备搭建 个小应用的主体框架.

找了好久的就是没找到对应的文章来讲解这一块.. 翻了他们主网站上人家问的,以及API 才摸索... 不懂英文好吃力呀~~~

首先选到的就是,依旧用 Mdi子窗体模式加载子模块

第一步: 创建一个主 RibbonForm 为: ParentForm

1.1 设置 RibbonControl 属性 MdiMergeStyle 为: Always

第二步: 在左边拖入一个NavBarControl 设置Dock : Left

第三步: 拖入: XtraTabbedMdiManager

  3.1 设置 XtraTabbedMdiManager 的 MdiParent 为: 当前窗体:ParentForm

以上 主窗体部分完成

第四步: 新建子 RibbonForm 为: ChildForm

第五步: 在ChildForm中拖入: XtraScrollableControl 并设置 Dock:Fill 然后你可以把你的组件都拖入这个控件,这样就会在 ChildForm 被 加载的话会有 滚动条

第六步: 在 ChildForm 的 RibbonControl 中添加对就应的 RibbonPage 和 按钮

以上子窗体部分完成

好了,至此,基本控件我们都已经添加好了.,接下来我们来添加事件

第七步: 打开子窗体事件

在ParentForm的  navbarControl 中添加 Item 并添加事件

// 给 NavBarControl 添加 LinkClicked 事件
        private void navBarControl2_LinkClicked(object sender, NavBarLinkEventArgs e)
        {
            AddPageMdi(e.Link.Item);
        }

     // 打开子窗体方法
        private void AddPageMdi(NavBarItem navItem)
        {
            ChildForm childForm = new ChildForm();
            childForm.MdiParent = this;
           // 子窗体的 Text  就是 Tab页中的标题 ,我这里是直接取 navItem中的标题作为 tab页的标题
            childForm.Text = navItem.Caption + tabCount++;
            // 显示
            childForm.Show();
            // 设置当前 tab页的 图标,我这里也默认取navBar中的Item中的图标
            xtraTabbedMdiManager1.Pages[subform].Image = navItem.SmallImage;
        }

第八步: 添加双击页签时,关闭页签事件,记住 是添加在: XtraTabbedMdiManager 的 MouseDown 事件中:

private DateTime m_LastClick = System.DateTime.Now;
        private XtraMdiTabPage m_lastPage = null;
        private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e)
        {
            XtraMdiTabPage curPage = (sender as XtraTabbedMdiManager).SelectedPage;

            if (e.Button == MouseButtons.Left)
            {

                DateTime dt = DateTime.Now;
                TimeSpan span = dt.Subtract(m_LastClick);
                if (span.TotalMilliseconds < 300)  //如果两次点击的时间间隔小于300毫秒,则认为是双击
                {

                    if (this.MdiChildren.Length > 1)
                    {

                        // 限制只有在同一个页签上双击才能关闭.(规避两个页签切换时点太快导致意外关闭页签)
                        if (curPage.Equals(m_lastPage))
                        {
                            //if (this.ActiveMdiChild != m_MapForm)
                            //{
                            this.ActiveMdiChild.Close();
                            //}

                        }
                    }
                    m_LastClick = dt.AddMinutes(-1);
                }
                else
                {
                    m_LastClick = dt;
                    m_lastPage = curPage;
                }
            }
        }

第九步: 添加合并Mdi子窗体的 状态栏 ,记得是在ParentForm的 RibbonControl控的 Merge事件和 UnMerge 事件中添加 这样就能在切换子窗体页签的时候同时将子窗体的状态栏也合并到主窗体的状态栏上,并且在切换另一个的时候同时卸载当前子窗体的合并状态栏,

private void ribbon_Merge(object sender, DevExpress.XtraBars.Ribbon.RibbonMergeEventArgs e)
        {
            RibbonControl parentRRibbon = sender as RibbonControl;
            RibbonControl childRibbon = e.MergedChild;
            parentRRibbon.StatusBar.MergeStatusBar(childRibbon.StatusBar);
        }

        private void ribbon_UnMerge(object sender, RibbonMergeEventArgs e)
        {
            RibbonControl parentRRibbon = sender as RibbonControl;
            parentRRibbon.StatusBar.UnMergeStatusBar();

        }

OK 基本至此,小应用框架就能搭建出来了,后期还需要再添加控制,已经加载的子窗体不能重复添加的功能.

以及 NavBarControl 的 过滤功能.

[注意: Mdi子窗体的RibbonControl中的控件合并到主窗体上的时候,是根据Text属性值来合并的,如果对应的 Text值和主窗体上的 RibbonControl中的 Page或是 Group 的Text一样的话就会被合并到同个Page或是 Group 中

另外,子窗体中的RibbonControl中的按钮之类的是根据Caption来进行合并的可以通过: mergeType来控制在合并到主窗体时是 :

  Add添加(默认) ,

Replace:替换(子窗体按钮设置就可以)

MergeItems (还搞不清楚)

Remove:移除(需要主窗体的 MergeType 和 子窗体的MergeType 都设置为:Remove 时才可以)

时间: 2024-12-18 15:08:45

DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案的相关文章

背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebView) 加载指定 HttpMethod 的请求 自定义请求的 http header app 与 js 的交互 示例1.演示 WebView 如何加载指定 HttpMethod 的请求以及如何自定义请求的 http headerWebApi/Controllers/WebViewPostController.cs /* * 用于 WebView 演示“如何加载指定 HttpMethod 的请求,以及如何自

控件WebView网页的加载

Android:控件WebView网页的加载 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要处理解析,渲染网页等浏览器做的事情 setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 WebViewClient就是帮助WebView处理各种通知.请求事件的. 1.在Andr

easyui中 combogrid控件的loadData方法加载本地数据

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title

DevExpress的Web控件汉化方法

原文:DevExpress的Web控件汉化方法 项目中用到devexpress的web控件,机器没有安装devexpress控件,直接在项目中引用的dev的dll,项目运行时发现都是英文界面,所以解决汉化问题. 项目中用的是v10.2版本,以此版本为例,其他版本方法应该类似. 步骤如下:   1.从官网下载对应的汉化包,地址:http://www.devexpresscn.com/news/DevExpress-news-94.html,找到对应的版本下载. 2.在下载的汉化文件里找到\Web\

[转]设置控件全局显示样式appearance proxy

转自:huifeidexin_1的专栏 appearance是apple在iOS5.0上加的一个协议,它让程序员可以很轻松地改变某控件的全局样式(背景) @selector(appearance) 支持UIAppearance协议的类可以访问appearance selector ,它为receiver返回appearance proxy,我么可以给proxy发一些消息,诸如setTintColor:等 但是它并不是支持所有的UI类.下面列出它支持的类 1.UIActivitiIndicator

DevExpress XtraGrid网格控件示例三:获取当前处于编辑状态的值

使用下面的示例代码,以获得当前编辑的值. C# 1 string editingValue; 2 if(gridControl1.KeyboardFocusView.IsEditing) 3 editingValue = gridControl1.KeyboardFocusView.EditingValue.ToString(); DevExpress XtraGrid网格控件示例三:获取当前处于编辑状态的值,布布扣,bubuko.com

DevExpress XtraGrid网格控件示例六:自定义合并单元格

假设 "Order Date" 列中包含日期/时间值.如果视图的GridOptionsView.AllowCellMerge选项设置为true,若相邻两个单元格值是日期/时间值的话,这两个相邻单元格便会合并.下面的代码介绍了如何合并例单元格的日期部分,要覆盖默认的单元格合并机制,需要处理一下GridView.CellMerge事件. C# using DevExpress.XtraGrid.Views.Grid; // ... private void gridView1_CellMe

DevExpress XtraGrid网格控件示例四:初始化新建行的单元格

下面的代码显示了如何利用ColumnView.InitNewRow事件初始化新创建行的PurchaseDate字段: C# 1 using DevExpress.XtraGrid.Views.Grid; 2 private void gridView1_InitNewRow(object sender, InitNewRowEventArgs e) { 3 DevExpress.XtraGrid.Views.Grid.GridView view = sender as Grid.GridView

DevExpress XtraGrid网格控件示例五:验证终端用户输入的数据

本示例中禁用了无效的“colBudget”列单元格赋值.单元格值应该大于零且小于1,000,000.BaseView.ValidatingEditor事件处理检查输入值的有效性.如果出现无效的单元格赋值,BaseView.InvalidValueException事件会显示异常消息框.在这样情况下,调用GridView.HideEditor方法以便放弃所做的更改. C# 1 using DevExpress.XtraEditors.Controls; 2 // ... 3 private voi