상세 컨텐츠

본문 제목

[ C#] 고급 컨트롤 (리스트 뷰, 트리뷰, 웹브라우저)

<개인공부>/[C#]

by 데브수달 2024. 10. 27. 17:05

본문

728x90
반응형

[ C#] 고급 컨트롤 (리스트 뷰, 트리뷰, 웹브라우저)

나는 UI 가지고 노는 이런 컨트롤쪽 공부가 더 재밌다...;;흑 ㅠㅠ

 

------------------------어제 밤 교재로는 한 번 쭉 살펴본 것들 정리할 공간 -----------------------------

<ListView>
1.폼 디자인 
레이블 3개 , 텍스트박스 3개 , 버튼 2개 (입력,삭제), 리스트 뷰1개(ColumnHeader 속성->  이름,휴대폰,소속  width 200,150,150 설정)

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ListView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // 추가
        private void btnInsert_Click(object sender, EventArgs e)
        {
            //이름,전화번호,회사 텍스트박스가 1개라도 빈값이면 입력채우라고 메세지 띄우기
            if (tbName.Text =="" || tbPhone.Text == "" || tbOrg.Text == "")
            {
                MessageBox.Show("입력 안한 곳을 전부 채워주세요.");
            }
            else // 전부 채워지면 
            {
                //string 배열 선언
                string[] strArray = new string[]
                { tbName.Text, tbPhone.Text, tbOrg.Text};
                ListViewItem lvt = new ListViewItem(strArray);
                listView1.Items.Add(lvt);
                tbName.Clear();
                tbPhone.Clear();
                tbOrg.Clear();
            }
        }
        //삭제
        private void btnDelete_Click(object sender, EventArgs e)
        {
            int selectedIndex = listView1.FocusedItem.Index; // 리스트박스에 포커스된 아이템의 INDEX를 
            // selectedIndex 정수형 변수에 할당
            // RemoveAt() 메소드는 포커스된 아이템의 인덱스를 전달함으로 리스트 뷰의
            //선택되어있는 아이템을 삭제한다.
            listView1.Items.RemoveAt(selectedIndex); 
        }
    }
}

 

listview의 COLUMHEADER 컬렉션 편집기는 속성의 COLUMNS 의 컬렉션 클릭시 위와 같이 창이 나오고 추가 해서 NAME과 WIDTH TEXT 설정해준다.
View라는 속성을 Details로 설정해야 columnheader설정한 아이템들이 보인다.

 


<TreeView>

: 트리뷰는 데이터나 정보를 계층적 구조로 보여주는 컨트롤이다.

0. 트리 뷰의 속성과 내용 


1.폼 디자인 
트리뷰 1개, 텍스트박스1개, 버튼 5개 배치

 

트리 뷰의 노드 추가하는 TreeNode편집기는 Nodes 라는 속성의 컬렉션을 클릭하면 편집기 창이 나타난다.. +루트 추가로 TEXT : ' IT도서' 확인

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace TreeView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // 추가 버튼 클릭시 
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //트리노드 라는 node1 객체 생성
            TreeNode node1 = new TreeNode(tbNode.Text); // 텍스트 박스의 입력을 인자로받음

            //트리뷰의 선택된 노드가 있는지 뷰의 속성인 SelecteNode로 확인
            if(treeView1.SelectedNode != null && treeView1.SelectedNode.IsSelected)
            {
                treeView1.SelectedNode.Nodes.Add(node1);
            }
            else
            {
                treeView1.Nodes.Add(node1);
            }
        }
        // 삭제 버튼 클릭시
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //트리뷰의 선택된 노드가 있는지 뷰의 속성인 SelecteNode로 확인
            if (treeView1.SelectedNode != null && treeView1.SelectedNode.IsSelected)
            {
                treeView1.SelectedNode.Remove();
            }
        }
        // 확장 버튼 클릭시 
        private void btnExpandAll_Click(object sender, EventArgs e)
        {
            treeView1.ExpandAll();
        }
        // 축소 버튼 클릭시
        private void btnCollapseAll_Click(object sender, EventArgs e)
        {
            treeView1.CollapseAll();
        }
        //트리노드 타입의 리스트 객체 생성 -> 트리 전체의 각 노드 체크 여부를 확인하기 위해 
        // 리스트 객체를 이용한다.
        List<TreeNode> chkNodes = new List<TreeNode>(); 
        //체크항목만 삭제하는 버튼 클릭시
        // 메소드 생성 
        void RemoveCheckedNodes(TreeNodeCollection nodes)
        {

            //foreach 반복문은 List와 같은 제네릭 객체의 요소를 처음부터 마지막까지 읽어 들일 수 있다.
            // 전달인자로 받은 TreeNodeCollection 객체의 노드 요소를
            // 처음부터 끝까지 읽어 들이면서 체크 여부를  확인해서 
            // chkNodes에 추가합니다. (체크된것만 추가됨)
            // 그렇지 않으면 (else)
            //RemoveCheckedNodes(node.Nodes); 메소드를 호출하여 
            // 현재 노드의 하위 노드를 체크합니다.

            foreach (TreeNode node in nodes)
            {
                if (node.Checked)
                {
                    chkNodes.Add(node);

                }
                else
                {
                    RemoveCheckedNodes(node.Nodes);
                }
            }
            // 체크된 것들이 모인 chkNodes 를 처음부터 마지막까지 반복하면서 
            // 노드를 지운다.
            foreach(TreeNode chknode in chkNodes)
            {
                nodes.Remove(chknode);
            }
        }

        private void btnChkDelete_Click(object sender, EventArgs e)
        {
            // RemoveCheckedNodes 메소드를 호출한다.
            RemoveCheckedNodes(treeView1.Nodes);
        }
    }
}


<웹브라우저>

웹상의 사이트를 불러오는 컨트롤를 이용해보겠다.

 

추가할 컨트롤
: 레이블1개 (주소 입력: )
텍스트박스 1개 
버튼 1개
웹 브라우저 컨트롤 1개 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WebBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            //tbAddress 에 입력한 주소로 네비게이트 (이동) 메소드 
            webBrowser1.Navigate(this.tbAddress.Text);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            MessageBox.Show("웹 사이트 로딩이 완료되었습니다.");
        }

        private void tbAddress_KeyDown(object sender, KeyEventArgs e)
        {
            // 주소 입력하고 해당 텍스트박스에서 지정 키를 클릭하면 [이동]버튼 호출 
            if (e.KeyCode == Keys.Enter)
            {
                webBrowser1.Navigate(this.tbAddress.Text);
            }
        }
    }
}

728x90
반응형

관련글 더보기