使用C#创建动态左菜单及MDI主窗口实践代码
"C#中实现左菜单动态加载主菜单的源代码示例,通过DevExpress控件库,尤其是DevExpress.XtraNavBar组件,展示了如何在MDI(多文档界面)窗体中创建一个具有顶部主菜单和左侧导航菜单的界面。这个示例强调了如何将菜单条目映射到导航栏组,以及设置标签页的删除按钮显示模式。" 在C#编程中,创建具有主菜单和侧边栏菜单的用户界面是常见的需求,特别是在MDI应用程序中。此代码片段提供了一个解决方案,利用DevExpress的控件库,特别是`DevExpress.XtraNavBar`,来简化这一过程。`DevExpress` 是一个流行的.NET开发框架,提供了许多高级的UI控件和组件,使得开发者可以快速构建功能丰富的Windows应用。 在代码中,首先定义了一个名为`frmMAIN`的窗体类,这是主应用程序窗体。窗体的构造函数`InitializeComponent()`用于初始化窗体及其控件,而`AddLeftMarItem()`方法则负责添加左侧菜单项。 `AddLeftMarItem`方法的核心是遍历`menuStrip1`中的菜单项,`menuStrip1`是一个标准的Windows Forms菜单控件,用于创建顶部的主菜单。当发现一个菜单项有子菜单(即`DropDownItems.Count > 0`),它会创建一个新的`NavBarGroup`对象,这将在导航栏中表示为主菜单的子类别。每个`NavBarGroup`与相应的菜单项关联,并添加到`navBarControl1`的组集合中。 `navBarControl1`是DevExpress的导航栏控件,它可以显示成垂直或水平布局,非常适合用于创建侧边栏菜单。通过设置`GroupStyle`为`NavBarGroupStyle.LargeIconsText`,可以确保每个组显示大图标和文本。 此外,代码还设置了`xtraTabbedMdiManager1.ClosePageButtonShowMode`,这允许在每个MDI子窗口的标签页后面显示关闭按钮,使得用户能够方便地关闭子窗口。 总结来说,这段代码展示了如何利用DevExpress的`XtraNavBar`控件动态加载和呈现主菜单和子菜单到左侧导航栏,以及如何配置`XtraTabbedMdiManager`以提高用户界面的交互性。这对于那些希望在C# MDI应用中创建高效、直观的用户界面的开发者来说是非常有价值的。
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraNavBar;
namespace FXJTEST
{
public partial class frmMAIN : Form
{
public frmMAIN()
{
InitializeComponent();
AddLeftMarItem();
this.xtraTabbedMdiManager1.ClosePageButtonShowMode = DevExpress.XtraTab.ClosePageButtonShowMode.InAllTabPagesAndTabControlHeader;//设置标签后面添加删除按钮 , 多个标签只需要设置一次..
}
private void AddLeftMarItem()
{
int c = 0;
for (int i = 0; i < menuStrip1.Items.Count; i++)
{
ToolStripMenuItem item = (ToolStripMenuItem)menuStrip1.Items[i];
if (item.DropDownItems.Count > 0)
c++;
NavBarGroup nbGroup1 = new NavBarGroup();
nbGroup1.Name = "nbGroup" + c.ToString();
nbGroup1.Caption = menuStrip1.Items[i].Text;
nbGroup1.SmallImageIndex = -1;
nbGroup1.LargeImageIndex = -1;
nbGroup1.GroupStyle = NavBarGroupStyle.LargeIconsText;
//添加到导航栏所有分组集合
navBarControl1.Groups.Add(nbGroup1);//根据主菜单增加组
for (int j = 0; j < item.DropDownItems.Count; j++)//增加组下面的项
{
ToolStripMenuItem subItem = new ToolStripMenuItem();
subItem = (ToolStripMenuItem)item.DropDownItems[j];
AddSubItem(subItem, nbGroup1);
}
}
}
}
private void AddSubItem(ToolStripMenuItem subItem, NavBarGroup nbGroup1)//用递归的方法来不限层级的根据菜单项来生成左窗口菜子菜单项
{
int d = 0;
if (subItem.DropDownItems .Count ==0)//判断是不是末端菜单项
{
d++;
NavBarItem nbItem = new NavBarItem();
nbItem.Name = "nbItem" + d.ToString(); ;
剩余5页未读,继续阅读
- 粉丝: 92
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦