Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[드래그&드랍] TreeView Node간 이동

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 3426

TreeView Node 들의 위치를 마우스 드래그 앤 드랍 처럼 구현한 예제입니다.
전통적인 윈폼의 Drag & Drop 구현패턴이 아닌 마우스 관련 이벤트를 사용했습니다.  

 

 

        private TreeNode selectedNode = null

        private TreeNode candidateNode = null;  

 

        private void treeView1_MouseDown(object sender, MouseEventArgs e)

        {                       

            this.selectedNode = this.treeView1.GetNodeAt(e.X, e.Y);                  

        }

        

        //마우스가이동하는동안Over 되는Node 의색을강조하는메서드

        private void treeView1_MouseMove(object sender, MouseEventArgs e)

        {

            if (!this.isMoveAble(e)) return;

 

            //바로이전마우스Over Node 의색깔을원상복귀시킨다

            if (this.candidateNode != null) this.candidateNode.BackColor = 

                                                                     this.treeView1.BackColor;

 

            this.candidateNode = this.treeView1.GetNodeAt(e.X, e.Y);

            this.candidateNode.BackColor = Color.Gray;          

        }

 

        private void treeView1_MouseUp(object sender, MouseEventArgs e)

        {

            TreeNode goalNode = null;

            try

            {

                if (!this.isMoveAble(e)) return;

 

                goalNode = this.treeView1.GetNodeAt(e.X, e.Y);

 

                //자기자신에게추가하는것을불허용

                if (this.selectedNode == goalNode) return;

 

                //원래부모노드일경우추가불필요

                if (this.selectedNode.Parent == goalNode) return;

 

                //실제Node 를추가하는부분

                this.treeView1.Nodes.Remove(this.selectedNode);

                goalNode.Nodes.Add(this.selectedNode);

                goalNode.Expand();

                this.treeView1.Update();

 

                //이동한Node TreeView 의현재선택된노드로강조한다

                this.treeView1.SelectedNode = this.selectedNode;

            }

            catch (Exception ex)

            {

                MessageBox.Show("노드이동중예외발생: " + ex.Message);

            }

            finally

            {

                goalNode.BackColor = this.treeView1.BackColor;

            }

        }

 

        private bool isMoveAble(System.Windows.Forms.MouseEventArgs e)

        {

            //마우스왼쪽버턴일경우에만허용

            if (e.Button != MouseButtons.Left) return false;

 

            //해당좌표에Node 가있을경우에만허용

            if (this.treeView1.GetNodeAt(e.X, e.Y) == null) return false;

 

            //선택된Node 가있을경우에만허용

            if (this.selectedNode == null) return false;

 

            return true;

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            this.treeView1.ExpandAll();

        }

 

이름
비밀번호
홈페이지
ZY <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요