C# Dev利用TreeList设置菜单导航并双击节点打开模块窗体
新建一个项目,名称为TreeViewMemo;在Form1窗体上添加控件DockManager和treelist,作为导航菜单,并可以实现左侧停靠及关闭导航菜单,关闭后用主菜单按钮打开;imageCollection为导航节点添加节点图标,xtraTabbedMdiManager作为显示打开窗体的容器;最终结果如下图:
添加引用,此处用的Oracle数据库;
using Oracle.ManagedDataAccess.Client;
using System.Reflection;
写一个方法用于调用查询系统导航菜单的结构
private string connecting = "数据库连接字符串";
private DataTable GetTable(string sql) //获取查询的返回结果集
{
DataTable dt = new DataTable();
OracleConnection con = new OracleConnection(connecting);
con.Open();
OracleDataAdapter oda = new OracleDataAdapter(sql,con);
oda.Fill(dt);
con.Close();
return dt;
}
利用Form1的Load事件为为TreeList添加数据源,并设置Treelist的属性值,代码如下:
private void Form1_Load(object sender, EventArgs e)
{
/在每个打开页面上都多一个关闭的小叉子x
this.xtraTabbedMdiManager1.ClosePageButtonShowMode = DevExpress.XtraTab.ClosePageButtonShowMode.InActiveTabPageHeader;
//当打开的窗体大于1个的时候,可以拖拽一个处于悬浮状态,也可以拖拽回到MDI父容器中
this.xtraTabbedMdiManager1.FloatOnDoubleClick = DevExpress.Utils.DefaultBoolean.True;
this.xtraTabbedMdiManager1.FloatOnDrag = DevExpress.Utils.DefaultBoolean.True;
this.xtraTabbedMdiManager1.FloatPageDragMode = DevExpress.XtraTabbedMdi.FloatPageDragMode.FullWindow;
//获取数据库菜单
string sql = " SELECT * FROM DP_SYSLIST order by 1";
DataTable dt = new DataTable();
dt = GetTable(sql);
treeList1.DataSource = dt;
treeList1.KeyFieldName = "SYS_ID";//父级字段名称
treeList1.ParentFieldName = "SYS_LEVEL";//展开所有节点
//treeList1.ExpandAll(); //展开子节点
//treeList1.Appearance.FocusedCell.BackColor = Color.LightSteelBlue; //焦点行颜色渐变
// treeList1.Appearance.FocusedCell.BackColor2 = Color.SteelBlue;
//treeList1.OptionsView.ShowHorzLines = false; //隐藏行列边框
//treeList1.OptionsView.ShowVertLines = false; //隐藏垂直表格线
treeList1.OptionsView.FocusRectStyle = DevExpress.XtraTreeList.DrawFocusRectStyle.None; //隐藏焦点行边框
treeList1.LookAndFeel.UseWindowsXPTheme = true; //使用XP主题
treeList1.LookAndFeel.UseDefaultLookAndFeel = true; //禁用默认外观与感觉
treeList1.OptionsView.ShowIndicator = false; //隐藏节点指示器面板 显示序号的地方
treeList1.OptionsBehavior.Editable = false; //禁止编辑
//treeList1.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Percent50; //设置树线的样式
//treeList1.OptionsView.ShowColumns = false; //隐藏列名
treeList1.OptionsMenu.EnableColumnMenu = false; //右键点击字段值不显示菜单
treeList1.OptionsCustomization.AllowSort = false; //点击字段值排序
treeList1.OptionsCustomization.AllowFilter = false; //字段值右上角的沙漏,过滤
treeList1.Appearance.FocusedCell.BackColor = System.Drawing.Color.LightSteelBlue; //设置选中行的背景色
// treeList1.Appearance.FocusedCell.Options.UseBackColor = true;
treeList1.OptionsCustomization.AllowColumnMoving = false; //禁止拖拽表头 字段值
//treeList1.OptionsView.ShowColumns = false; //隐藏列标头
treeList1.OptionsView.ShowIndentAsRowStyle = true;
}
导航菜单的表结构
SYS_MODEL为窗体名称,SYS_PATH为名称空间名称,也就是项目名称;
添加一个控件dockManager,做为导航菜单,可以实现做隐藏,设置dockmanager的属性
this.dockManager1.AutoHiddenPanelShowMode = DevExpress.XtraBars.Docking.AutoHiddenPanelShowMode.MouseHover;
this.dockManager1.DockingOptions.AllowRestoreToAutoHideContainer = true;
this.dockManager1.DockingOptions.HideImmediatelyOnAutoHide = true;
点击Add Panel at Left ,添加一个dockPanel1,设置dockpanel1的属性;
this.dockPanel1.Dock = DevExpress.XtraBars.Docking.DockingStyle.Left;
this.dockPanel1.Text = "导航菜单";
将Treelist拖到dockPanel1中,设置treelist的属性
this.treeList1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeList1.OptionsView.ShowColumns = false; //隐藏标题列头字段值
在TreeList的属性中添加一列值,作为显示导航列
并为TreeList属性SelectImageList选择刚刚添加的控件imageCollection1;
设置imageCollection1的属性,添加图标,点击Images,弹出的界面中添加图标
设置TreeLsit的GetSelectImage事件,代码如下:
private void treeList1_GetSelectImage(object sender, DevExpress.XtraTreeList.GetSelectImageEventArgs e)
{
if (e.Node.Expanded == false) //如果不是展开状态
{
e.NodeImageIndex = 3; //显示索引为3的图标
}
else //否则为展开状态
{
e.NodeImageIndex = 4; //显示索引为4的图标
}
if (e.Node.FirstNode == null) //如果为最后一个节点,没有子节点
{
e.NodeImageIndex = 5; //显示为索引5的的图标
}
}
最后做TreeList的DoubleClick事件,实现双击节点打开窗体,并在父容器中显示,代码如下:
private void treeList1_DoubleClick(object sender, EventArgs e)
{
TreeListNode clickedNode = this.treeList1.FocusedNode;
if (clickedNode.FirstNode == null)
{
try
{
string strFunNo = clickedNode.GetValue("SYS_MODEL").ToString();
//string path = Assembly.GetExecutingAssembly().GetName().Name; //获取命名空间名称
string path= clickedNode.GetValue("SYS_PATH").ToString();
string name = path + "." + strFunNo;
//Assembly assembly = Assembly.GetExecutingAssembly();
// 实例化窗体,利用反射打开窗体
// Form form = assembly.CreateInstance(name) as Form;
Form form = Assembly.Load(path).CreateInstance(name) as Form;
// form.Show();
//判断窗体是否打开,打开则跳转,未打开则打开
bool flag = false;
foreach (Form form2 in base.MdiChildren)
{
bool flag2 = form.Name == form2.Name;
if (flag2)
{
form2.Activate();
flag = true;
form.Dispose();
break;
}
}
bool flag3 = !flag;
if (flag3)
{
form.MdiParent = this;
form.FormBorderStyle = FormBorderStyle.None;
form.Dock = DockStyle.Fill;
form.Show();
}
}
catch
{
MessageBox.Show("当前菜单没有启用");
}
}
}
//重新加载菜单的代码
private void ResToolStripMenuItem_Click(object sender, EventArgs e)
{
treeList1.CollapseAll();//折叠全部节点
//重新加载的菜单
string sql = " SELECT * FROM DP_SYSLIST order by 1";
DataTable dt = new DataTable();
dt = GetTable(sql);
treeList1.DataSource = dt;
treeList1.KeyFieldName = "SYS_ID";//父级字段名称
treeList1.ParentFieldName = "SYS_LEVEL";//展开所有节点
//关闭全部窗体,除去Form1,Form1为主窗体
for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
{
if (Application.OpenForms[i].Name != "Form1")
{
Application.OpenForms[i].Close();
}
}
}
private void ShowMenuToolStripMenuItem_Click(object sender, EventArgs e)
{ //显示菜单的代码
this.dockPanel1.Show();
this.dockPanel1.Dock = DevExpress.XtraBars.Docking.DockingStyle.Left;
}
C# Dev利用TreeList设置菜单导航并双击节点打开模块窗体相关推荐
- 码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
文章目录 卷首语 谷歌API参考 1. 基本步骤 2. 创建一个AS项目,NoActivity 3. AS创建一级菜单的SettingsFragment 4. AS创建二级菜单的SettingsFra ...
- 利用jQuery制作的导航下拉菜单效果
利用jQuery制作的导航下拉菜单效果,其实利用css同样可以实现导航下拉菜单效果,但自从学习了jQuery后,感觉还是jQuery做起来效果更好.jQuery制作导航下拉菜单,需要用到jQuery方 ...
- java底部菜单_安卓开发笔记——TabHost组件(一)(实现底部菜单导航)
什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先 ...
- 转-TabHost组件(二)(实现底部菜单导航)
http://www.cnblogs.com/lichenwei/p/3975095.html 上面文章<安卓开发复习笔记--TabHost组件(一)(实现底部菜单导航)>中提到了利用自定 ...
- Python Web前端实战案例——电商网站商品菜单导航栏
jQuery是一个快速.小巧.轻量级的.写的少.做的多.功能丰富的 JavaScript 库,是目前最流行的 JS 框架.利用它可以帮我们快速实现一些炫酷的效果. 目录 1 原理先知 2 思路概要 3 ...
- HMI-50-【多媒体】菜单导航界面实现
HMI-50-[多媒体]菜单导航界面实现 今天是清明小长假的第二天,我们来实现以下菜单.因为咱们这个是纯粹使用二维来凑三维,所以效果肯定是有点拉胯的,各位看官留情. 当前进度 按照以往的节奏. ...
- DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能
场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- TreeList右键菜单功能
1:常用属性 1): Appearance->FocusedRow-->BackColor 设置选中的节点颜色 2):LookAndFell--> 将树的样式设置为加减号的样式, ...
- CSS+JS灰色树型菜单导航代码
代码简介: CSS+JS打造的树型菜单,没有怎么美化,颜色看上去也不很美,提供一种思路,真想用的朋友好好修改一下颜色,里面都有注释,相信通过你的努力,它最终的效果一定很漂亮. 代码内容: <!D ...
最新文章
- Altium Designer同一个工程里不同原理图导入到不同的PCB
- 逻辑网拓扑和物理网拓扑——微云网络
- js在IE下面弹出打开和保存文件的对话框
- boost::histogram::axis::option用法的测试程序
- Java+大数据开发——Hadoop集群环境搭建(二)
- cacti不能实时刷新流量图_介绍一种编码帧内刷新算法
- java 陷阱,java 中的陷阱。
- SystemVerilog 2005 语法
- Effective C++ 学习笔记(24)
- Quartz-第一篇 认识Quartz
- 读文献、写论文时,有什么好用的软件或网站推荐?
- 自组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map),第一部分
- C#的DataTable详解
- Android 呼吸灯流程分析(一)
- Python Pycharm 对代码进行TODO标记注释
- 19.IIC通信:PCF8591:数模/模数转换芯片
- ImageIO类的使用
- 《改进SIR 模型在社交网络信息传播中的应用》仿真实现
- vue,的M、V、VM分别代表什么
- 基于规则的中文分词 - NLP中文篇
热门文章
- 网络直播对网络的要求有多高
- Oceanbase 扩容TPC-H测试
- 苹果13系统锁屏延迟_iPhone锁屏慢有延迟怎么办 苹果手机锁屏不灵敏解决方法
- 使用curl工具通过Gopher协议发送GET请求
- 零起步的Hadoop实践日记(搭建hadoop和hive)
- 报错解决:SyntaxError: Non-UTF-8 code starting with ‘\xe7‘
- 关机、睡眠和休眠有啥区别
- 【35】存储器层次结构全景:数据存储的大金字塔长什么样?
- golang 大数据平台_Golang在Momenta大数据平台当中的应用
- YOLOX改进之模型轻量化(Lite)