溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

發(fā)布時(shí)間:2020-06-28 05:37:28 來(lái)源:網(wǎng)絡(luò) 閱讀:707 作者:jirigala_bao 欄目:編程語(yǔ)言

應(yīng)用軟件是否好用就體現(xiàn)在一些細(xì)節(jié)操作上,開發(fā)人員是否考慮到了很多細(xì)節(jié),例如一個(gè)樹形結(jié)構(gòu)的數(shù)據(jù)若不支持拖拽功能那用起來(lái)會(huì)很糟糕一些,用戶體驗(yàn)也會(huì)不太爽,下面就以通用權(quán)限管理系統(tǒng)組件源碼中的組織機(jī)構(gòu)(部門)管理模塊為例子,講解一下樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能實(shí)現(xiàn)。

 

   其實(shí)組織機(jī)構(gòu)管理模塊平時(shí)不怎么用到拖拽功能,但是往往在數(shù)據(jù)初始化時(shí)為了實(shí)現(xiàn)快速輸入數(shù)據(jù)及進(jìn)行整理調(diào)整數(shù)據(jù)時(shí),往往就非常迫切需要一個(gè)靈活的組織機(jī)構(gòu)管理器,當(dāng)每到年底或者公司進(jìn)行大的人事調(diào)整時(shí)也會(huì)遇到后臺(tái)管理員迫切需要拖拽功能的需求,平時(shí)組織機(jī)構(gòu)不會(huì)有大變動(dòng)。

 

   軟件功能是否好用,往往是體現(xiàn)在最需要折騰數(shù)據(jù)時(shí)是否好用?養(yǎng)兵千日用兵一時(shí),一般沒經(jīng)過(guò)磨難的新開發(fā)的軟件往往會(huì)想得不夠周到,關(guān)鍵時(shí)刻容易掉鏈子,經(jīng)不起客戶的折騰。

 

   例子程序運(yùn)行效果如何下:

   C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

   當(dāng)然在節(jié)點(diǎn)拖拽時(shí),需要注意幾個(gè)事情:

   1:拖拽時(shí)總需要有提示信息比較好,防止誤操作后找不到被托摘到哪里去了。

   2:父親節(jié)點(diǎn)總不能拖拽到自己的子節(jié)點(diǎn)上,那不是死循環(huán)或者亂了輩份了不是?

 

   為了讓TreeView支持拖拽功能,需要注意以下幾個(gè)屬性設(shè)置及相應(yīng)的事件代碼。

   C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

   C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

 

    代碼實(shí)現(xiàn)參考如下:

        private void tvOrganize_ItemDrag(object sender, ItemDragEventArgs e)
        {
            
if (this.permissionEdit)
            {
                
// 開始進(jìn)行拖放操作,并將拖放的效果設(shè)置成移動(dòng)。
                this.DoDragDrop(e.Item, DragDropEffects.Move);
            }
        }

        
private void tvOrganize_DragEnter(object sender, DragEventArgs e)
        {
            
// 拖動(dòng)效果設(shè)成移動(dòng)
            e.Effect = DragDropEffects.Move;
        }

        
private void tvOrganize_DragDrop(object sender, DragEventArgs e)
        {
            
// 定義一個(gè)中間變量
            TreeNode treeNode;
            
//判斷拖動(dòng)的是否為TreeNode類型,不是的話不予處理
            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"false))
            {
                
// 拖放的目標(biāo)節(jié)點(diǎn)
                TreeNode targetTreeNode;
                
// 獲取當(dāng)前光標(biāo)所處的坐標(biāo)
                
// 定義一個(gè)位置點(diǎn)的變量,保存當(dāng)前光標(biāo)所處的坐標(biāo)點(diǎn)
                Point point = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                
// 根據(jù)坐標(biāo)點(diǎn)取得處于坐標(biāo)點(diǎn)位置的節(jié)點(diǎn)
                targetTreeNode = ((TreeView)sender).GetNodeAt(point);
                
// 獲取被拖動(dòng)的節(jié)點(diǎn)
                treeNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
                
// 判斷拖動(dòng)的節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)是否是同一個(gè),同一個(gè)不予處理
                if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
                {
                    
if (BaseSystemInfo.ShowInformation)
                    {
                        
// 是否移動(dòng)部門
                        if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0038, treeNode.Text, targetTreeNode.Text), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                        {
                            
return;
                        }
                    }
                    ServiceManager.Instance.OrganizeService.MoveTo(UserInfo, treeNode.Tag.ToString(), targetTreeNode.Tag.ToString());
                    
// 往目標(biāo)節(jié)點(diǎn)中加入被拖動(dòng)節(jié)點(diǎn)的一份克隆
                    targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
                    
// 將被拖動(dòng)的節(jié)點(diǎn)移除
                    treeNode.Remove();
                }
            }
        }
復(fù)制代碼

 

  不足之處,希望大家都指點(diǎn)多留言,有錯(cuò)就積極改進(jìn),雖然博客園到處是高手,但是我們普通老百姓也往往需要一些實(shí)實(shí)在在的基礎(chǔ)功能。

 

 

將權(quán)限管理、工作流管理做到我能力的極致,一個(gè)人只能做好那么很少的幾件事情。

About

C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

吉日嘎拉(蒙古語(yǔ)為吉祥如意),2000年畢業(yè)于黑龍江大學(xué)計(jì)算機(jī)系軟件專業(yè),目前定居杭州,典型的IT軟件土鱉一個(gè),外號(hào)“軟件包工頭”。

 

通用權(quán)限管理系統(tǒng)組件(GPM - General Permissions Manager)自2003年開始發(fā)布,目前是國(guó)內(nèi)注冊(cè)用戶和免費(fèi)盜版用戶最多的權(quán)限管理系統(tǒng),是各種信息管理系統(tǒng)開發(fā)中徹底的權(quán)限解決方案。本組件支持多種主流數(shù)據(jù)庫(kù)(Oracle、sqlsever、db2、mysql),功能強(qiáng)大,使用方便,代碼簡(jiǎn)潔,思路嚴(yán)謹(jǐn),被廣大支持者稱為權(quán)限管理系統(tǒng)中的“走火入魔級(jí)權(quán)限管理系統(tǒng)”。

 

精心維護(hù)通用權(quán)限管理系統(tǒng)組件(GPM - General Permissions Manager)有8年多,3年的不斷推廣,20萬(wàn)行經(jīng)典的業(yè)務(wù)邏輯積累,經(jīng)過(guò)上萬(wàn)次的調(diào)試修正,經(jīng)歷了四百個(gè)付費(fèi)客戶,上百軟件公司的實(shí)戰(zhàn)開發(fā)。

11年以上開發(fā)經(jīng)驗(yàn),外企工作5年,上市公司3年,獨(dú)立經(jīng)營(yíng)軟件公司2年,主持研發(fā)部門管理工作4年以上。

將權(quán)限管理、工作流做到我能力的極致,一個(gè)人只能做好那么很少的幾件事情。

C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考
QQ:252056973,Mail:jirigala_bao@hotmail.com

訪問者分布C#實(shí)現(xiàn)樹型結(jié)構(gòu)TreeView節(jié)點(diǎn)拖拽的簡(jiǎn)單功能,附全部源碼,供有需要的參考

通用權(quán)限管理模塊的嚴(yán)謹(jǐn)設(shè)計(jì)定位、精心編碼實(shí)現(xiàn)、不斷維護(hù)推廣、持續(xù)優(yōu)化改進(jìn),主要是為了實(shí)現(xiàn)一個(gè)可以高度重復(fù)利用勞動(dòng)成果的工具軟件并×××給所需的人們,另想成為國(guó)人值得驕傲的知名軟件功能模塊。

可供國(guó)內(nèi)管理類開發(fā)人員在日常工作中進(jìn)行靈活二次開發(fā)利用的模塊,開發(fā)管理類軟件的必備工具之一,我們的目標(biāo)就是讓程序員早點(diǎn)兒回家休息。

淘寶店地址:http://jirigala.taobao.com

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI