最近刚接触到 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 时才可以)

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

  1. 使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体

    使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体     [csharp] view plaincopyprint? <SPAN ...

  2. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  3. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  4. 控件WebView网页的加载

    Android:控件WebView网页的加载 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWe ...

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

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

  6. Swift - 网页控件(UIWebView)加载本地数据,文件

    使用UIWebView加载本地数据或资源有如下三种方式: 1,使用loadHTMLString方法加载HTML内容 2,使用loadRequest方法加载本地资源(也可用于加载服务器资源) 3,先将内 ...

  7. android 自定义控件之NetWorkImageView 处理listview等控件中的图片加载乱序问题

    0.调用: BaseAdapter中设置方法 holder.iv.loadImage(url); adapter_xxx.xml 中 控件需要用 xxx.NetWorkImageView 1 NetW ...

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

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. ActiveX 控件和 Web 浏览器加载项

    百度ActiveX的概念. 如何从零开始写一个 Chrome 扩展 360极速浏览器应用开发平台.

随机推荐

  1. 【转】又一波你可能不知道的 Linux 命令行网络监控工具

      对任何规模的业务来说,网络监控工具都是一个重要的功能.网络监控的目标可能千差万别.比如,监控活动的目标可以是保证长期的网络服务.安全保护.对性能进行排查.网络使用统计等.由于它的目标不同,网络监控 ...

  2. 01-事件处理简介/UIView拖拽

    1.ios当中常见的事件?         触摸事件        加速计事件         远程控制事件2.什么是响应者对象?     继承了UIResponds的对象我们称它为响应者对象 UIA ...

  3. HDFS Java API 常用操作

    package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; impo ...

  4. python-appium手机自动化测试(仅需安装包)前期准备(pydev-eclipse编辑器)

    1.jdk安装与环境变量配置教程http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 我本机安装的是1.6.043 2.sdk下 ...

  5. Android开发-API指南-设备兼容性

    Device Compatibility 英文原文:http://developer.android.com/guide/practices/compatibility.html 采集日期:2014- ...

  6. iOS检测网络连接状态

    官方Demo下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 将Reachab ...

  7. ubuntu server unable to resolve host

    cat /etc/resolv.conf (查看resolv.conf中的内容: nameserver 是动态添加的……) #通过添加/etc/resolvconf/resolv.conf.d/bas ...

  8. DuiLib通用窗口类WindowImplBase封装

    .h头文件 class WindowImplBase : public CWindowWnd, public INotifyUI, public IMessageFilterUI, public ID ...

  9. NHibernate输出SQL语句

    用了NHierbate之后,很少需要写原生的SQL语句,由于总是看不到SQL语句,所以有时候对SQL调优非常不利.因此产生了让NHibernate输出它所生成的SQL语句的想法,以便于后续调优. 一. ...

  10. C# 最简单的递归

    public void AddTree(int ParentID, TreeNode pNode) { TreeNode tn1 = new TreeNode(); DataView dvTree = ...