본문 바로가기
C#/Winform

C# / Winform TreeView TreeView의 항목을 체크박스로 변경 및 체크된 항목 삭제하기.

by HyunS_ 2019. 4. 21.
728x90

this.treeView.CheckBoxes = true; 를 작성하면

 

TreeView에 출력되는 노드를 체크박스로 변경할 수 있습니다.

 

SelectedNode.Remove()를 사용하여 여러개의 노드를 체크 후 삭제 시도 시 에러 발생합니다.

 

여러개 항목을 체크 후 삭제 할 때는 별도의 코드를 작성해야 합니다.

 

		private List<TreeNode> checkedNodes = new List<TreeNode>();

		#region Form1()

		/// <summary>
		/// 생성자 입니다.
		/// </summary>
		public Form1()
		{
			InitializeComponent();

			this.addButton.Click	   += addButton_Click;
			this.deleteButton.Click	   += deleteButton_Click;
			this.deleteAllButton.Click += deleteAllButton_Click;

			this.treeView.CheckBoxes = true;
		}

		#endregion

		#region addButton_Click(sender, e)

		/// <summary>
		/// 추가 버튼 입니다.
		/// </summary>
		/// <param name="sender">이벤트 발생자 입니다.</param>
		/// <param name="e">이벤트 인자 입니다.</param>

		private void addButton_Click(object sender, System.EventArgs e)
		{
			this.treeView.Nodes.Add("Books");
			this.treeView.Nodes.Add("Papers");
			this.treeView.Nodes.Add("Folders");

			this.treeView.Nodes[0].Nodes.Add("Book_1");
			this.treeView.Nodes[0].Nodes.Add("Book_2");
			this.treeView.Nodes[0].Nodes.Add("Book_3");

			this.treeView.Nodes[1].Nodes.Add("Paper_1");
			this.treeView.Nodes[1].Nodes.Add("Paper_2");
			this.treeView.Nodes[1].Nodes.Add("Paper_3");
		}

		#endregion
		#region deleteButton_Click(sender, e)

		/// <summary>
		/// 삭제 버튼 입니다.
		/// </summary>
		/// <param name="sender">이벤트 발생자 입니다.</param>
		/// <param name="e">이벤트 인자 입니다.</param>
		private void deleteButton_Click(object sender, System.EventArgs e)
		{
			if (treeView.CheckBoxes = true)
			{
				RemoveCheckedNodes(treeView.Nodes);
			}

			else if (treeView.CheckBoxes = false)
			{
				this.treeView.SelectedNode.Remove();
			}
		}

		#endregion
		#region deleteAllButton_Click(sender, e)

		/// <summary>
		/// 전체 삭제 버튼 입니다.
		/// </summary>
		/// <param name="sender">이벤트 발생자 입니다.</param>
		/// <param name="e">이벤트 인자 입니다.</param>
		private void deleteAllButton_Click(object sender, System.EventArgs e)
		{
			this.treeView.Nodes.Clear();
		}

		#endregion

		#region RemoveCheckedNodes

		/// <summary>
		/// 체크된 노드를 삭제 합니다.
		/// </summary>
		/// <param name="nodes">노드들 입니다.</param>
		private void RemoveCheckedNodes(TreeNodeCollection nodes)
		{
			foreach (TreeNode node in nodes)
			{
				if (node.Checked)
				{
					checkedNodes.Add(node);
				}
				else
				{
					RemoveCheckedNodes(node.Nodes
					);
				}
			}

			foreach (TreeNode checkedNode in checkedNodes)
			{
				nodes.Remove(checkedNode);
			}
		}

		#endregion
728x90

댓글