본문 바로가기

IT/Winform & Devexpress

C# Devexpress treelist 레벨별 액션 취하기(treelist level)


안녕하세요 오랜만에 C# Devexpress관련 포스팅을 진행합니다.


오늘은 Treelist 라는 Control의 Level별 액션에 대해 설명해 볼까 합니다.



처음부터 Level은 계층별로 0,1,2,3 까지 구성된 트리입니다.


우선 저희가 할 액션을 더블클릭이라고 가정하고 설명해 보도록하겠습니다.


1. 0 레벨을 더블 클릭하면 아무런 액션이 없다.

2. 1 레벨을 더블 클릭하면 그림을 보여준다.

3. 2 레벨을 더블 클릭하면 아무런 액션이 없다.

4. 3 레벨을 더블 클릭하면 그래프를 보여준다.

private void treeList_DoubleClick(object sender, EventArgs e)

        {

            if (treeList.FocusedNode.Level == 1)

            {

               showImage(); //배경 화면

            }

            else if((treeList.FocusedNode.Level == 3)

            {

   showGraph(); // 그래프 보여주기

            }

        }


아주 간단하다 핵심은 treeList.FocusedNode.Level 이라는 속성이다.(level 속성)


응용: 우클릭 시 노드별로 다른 메뉴(ContextMenu)를 보여주고 싶다면

1. 0 레벨을 우클릭하면 1번메뉴를 보여준다.

2. 0 레벨을 우클릭하면 1번메뉴를 보여준다.

3. 0 레벨을 우클릭하면 1번메뉴를 보여준다.

4. 0 레벨을 우클릭하면 2번메뉴를 보여준다.


private void treeList_MouseUp(object sender, MouseEventArgs e)

        {

            TreeList tree = sender as TreeList;


            if (e.Button == MouseButtons.Right && ModifierKeys == Keys.None


                && tree.State == TreeListState.Regular)

            {


                Point pt = tree.PointToClient(MousePosition);


                TreeListHitInfo info = tree.CalcHitInfo(pt);


                if (info.HitInfoType == HitInfoType.Cell)

                {

                    tree.FocusedNode = info.Node;


                    if (treeListMC.FocusedNode.Level == 3)

                    {

                        contextMenuCmLv3.Show(MousePosition);

                    }

                    else if (treeList.FocusedNode.Level == 0 || treeList.FocusedNode.Level == 1 || treeList.FocusedNode.Level == 2)

                    {

                        contextMenuCmLv0_1_2.Show(MousePosition);

                    }

                }


            }

        }


핵심1 우클릭 한 위치를 정확히 찾아내고 마우스 클릭 위치인 MousePosition에 미리 만들어둔 contextMenu를 보여주는 것 입니다.

사전에 contextmenu를 만들어 둬야 겠죠?


핵심2 우트리리스트 내부에서 정확히 해당 Node의 위치에서 우클릭을 했는지 알아내야 합니다. Mouseposition과 PointToClient를 이용하여 정확한 위치의 Hitinfo를 찾아내야 합니다.


도움이 되셨는지요? 궁금한 점이 있으면 댓글 남겨주세요 하트도ㅠㅠ...


다음 번에는 트리리스트 레벨별 그림(아이콘)셋팅에 대해서 포스팅 해보겠습니다.

(레벨별로 설정한 그림을 보여주는 방법, 코드에서 조건이 바뀔 때마다 실시간으로 변경해주는 법)


반응형