DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能

摘要:
实现在表单已加载的情况下绑定Treelist的鼠标单击事件。this.treeList2.MouseClick+=树列表2_鼠标单击;事件方法中的PrivateInterestList2 _ MouseClick{//获取当前TreeList对象DevExpress.XtraTreeList.TreeList=senderasDevExpress.XtraTreeList.TreeList;if(TreeList!=null&&TreeList.Selection.Count==1){objectidValue=null;stringstrIdValue=String.Empty;DataTreeNodeData=null;//通过TreeListDataSource=TreeList.DataSourceasList的DataSource属性获取所有节点的ListList;if(DataSource!=null){//获取第一个Id属性idValue=TreeList.Selection[0].GetValue;strIdValue=idValue.ToString();//获取当前选定的节点DataTreeNode对象nodeData=datasource。其中。FirstOrDefault();if(nodeData!删除后无法恢复!
场景

Winform控件-DevExpress18下载安装注册以及在VS中使用:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243

DevExpress的TreeList怎样设置数据源,从实例入手:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102548490

实现了树形结构后,我们要实现在树形节点上点击右键时弹窗,弹窗确认之后实现将当前节点删除。

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

这里在窗体加载完的事件里绑定Treelist的鼠标点击事件。

this.treeList2.MouseClick += treeList2_MouseClick;

在事件方法中

private void treeList2_MouseClick(object sender, MouseEventArgs e)
        {
            //获取当前TreeList对象
            DevExpress.XtraTreeList.TreeList treeList = sender as DevExpress.XtraTreeList.TreeList;
            if (treeList != null && treeList.Selection.Count == 1)
            {
                object idValue = null;
                string strIdValue = String.Empty;
                DataTreeNode nodeData = null;
                //通过TreeList的DataSource属性获取所有节点的List
                List<DataTreeNode> datasource = treeList.DataSource as List<DataTreeNode>;
                if (datasource != null)
                {
                    //获取选中节点的集合中第一个的Id属性
                    idValue = treeList.Selection[0].GetValue("Id");
                    strIdValue = idValue.ToString();
                    //获取当前选中节点DataTreeNode对象
                    nodeData = datasource.Where<DataTreeNode>(p => p.Id == strIdValue).FirstOrDefault<DataTreeNode>();
                    if (nodeData != null)
                    {
                        //获取或设置是否启用聚焦节点的外观设置 -启用整行选中
                            treeList.OptionsSelection.EnableAppearanceFocusedRow = true;                                //启用整行选中

                            #region 右键弹出上下文菜单 - 删除待比较的文件
                            //如果点击的是鼠标右键
                            if (e.Button == System.Windows.Forms.MouseButtons.Right)
                            {
                                //构建右键菜单
                                System.Windows.Forms.ContextMenu ctxMenu = new System.Windows.Forms.ContextMenu();
                                //构建右键删除菜单项
                                System.Windows.Forms.MenuItem mnuDelete = new System.Windows.Forms.MenuItem();
                                mnuDelete.Text = "删除当前文件";
                                //删除菜单项点击事件订阅
                                mnuDelete.Click += delegate(object s, EventArgs ea)
                                {
                                    //DevExpress的对话框
                                    DialogResult dialogResult = DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("确定要删除此实验数据吗[{0}]?
删除后无法恢复!", nodeData.Id), "标题", System.Windows.Forms.MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                                    //如果点击了Yes
                                    if (dialogResult == DialogResult.Yes)
                                    {
                                        try
                                        {
                                            string fileName = String.Empty;

                                            #region 删除对应的树节点
                                            //通过设置主键ID找到节点node
                                            DevExpress.XtraTreeList.Nodes.TreeListNode selectedNode = treeList.FindNodeByKeyID(nodeData.Id);
                                            if (selectedNode != null)
                                            {
                                                //删除节点
                                                this.treeList2.Nodes.Remove(selectedNode);
                                            }
                                            #endregion
                                            //禁用整行选中
                                            treeList.OptionsSelection.EnableAppearanceFocusedRow = false;                               
                                        }
                                        catch (Exception ex)
                                        {
                                            ICSharpCode.Core.LoggingService<DataTreeListHelper>.Error("删除实验数据异常:" + ex.Message, ex);
                                            DevExpress.XtraEditors.XtraMessageBox.Show("删除实验数据异常:" + ex.Message, "标题",MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }
                                    }
                                };
                                ctxMenu.MenuItems.Add(mnuDelete);
                                ctxMenu.Show(treeList, new System.Drawing.Point(e.X, e.Y));
                            }
                            #endregion
                            return;
                    }
                }
                treeList.OptionsSelection.EnableAppearanceFocusedRow = false;                                //禁用整行选中
            }
        }

具体注释见代码。

免责声明:文章转载自《DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu16.04 启动纯文本界面方法端口被占用的问题解决 Web server failed to start. Port ×× was already in use下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ARCGIS10.5安装教程(附完整安装包和汉化包)

开始安装。可以通过路径修改的licensemanager的安装可以在十几秒内完成。开始安装桌面。在旧步骤中,首先提取它,然后安装它。第二个破解步骤是在破解文件夹中找到AfCore,如图Dll文件所示,该文件夹对应于桌面安装。例如,如果这篇文章的桌面安装路径为“D:ProgramFilesArcGISDesktop10.5”,则AfCore the dll将复...

boost的下载和安装(windows版)

1 Introduction boost是一个准C++标准库,相当于STL的延续和扩展。它的设计理念类似于STL,它使用泛型来最大化重用。对于2boost的下载和安装,我们可以在官方boost网站上下载最新的boost版本。因为boost库可以像标准库一样在多个平台上运行,所以它只以源代码的形式正式提供。这是因为boost windows的安装版本不仅与处理...

学习Python3 天眼查 爬虫

在开始学习Python时,我不想看基础知识,而且我的记忆力很差。我记不住那些语法,所以我直接去了这个项目。这是相当深刻的。刚好公司有情况需要检查企业的信息,所以我想成为一名爬虫。那些有验证码的人不愿意这样做。这是个大问题。我选择了天眼查,跳过检查过程,直接写下结果。总结的步骤如下:首先,天眼查最大的障碍是字体问题。本网站上有介绍,大致意思是网页上显示的一些字...

关于WINFORM中输入法的设置

关于WINFORM(转移到)John Suna的专栏开发中输入方法的设置,它碰巧遇到了这种问题。网络真的很好:)这是文本集。感谢作者的辛勤工作给您带来的便利。在WINFORM中,我们经常遇到这样的问题:文本输入框中的输入法被禁用或总是更改为全宽输入法。查阅相关数据后,总结如下:(1)Control.ImeMode属性:获取或设置控件的输入方法编辑器模式。此模...

mysql状态查看 QPS/TPS/缓存命中率查看

showglobalstatusslike'Com_ commit';showstatslike“无缓冲池读取%”;Thread_cache_Hits=(1-Thread_created/connections)*100%(8)锁定状态mysql&gt;showstatslike“Binlog_缓存%”;...

微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码

1) 我第一次使用wx。小程序端请求调用API,发现这是一个坑!@-_~Page:'pages/index/index',//在此处填写要跳转到的小程序页面。你不能在它前面添加/oh。发布后必须为1024页//小程序代码的边长,以像素为单位,范围[2801280]},标头:{'content-type':“application/json;charset=U...