關於C# WinForm_Tree View的一些基本用法(摘抄)

来源:https://www.cnblogs.com/Bai-Yi/archive/2018/12/06/10075378.html
-Advertisement-
Play Games

下麵是treeview的用法TreeView組件是由多個類來定義的,TreeView組件是由命名空間"System.Windows .Forms"中的"TreeView"類來定義的,而其中的節點(即Node),是由命名空間"System.Windows .Forms"中的"TreeNode"來定義的 ...


下麵是treeview的用法
TreeView組件是由多個類來定義的,TreeView組件是由命名空
間"System.Windows .Forms"中的"TreeView"類來定義的,而其中的
節點(即Node),是由命名空間"System.Windows .Forms"中
的"TreeNode"來定義的。所以當在程式中創建一個TreeView對象,
其實只是創建了一個可以放置節點的"容器"。而在這個容器中加入
一個節點,其實就是加入了從"TreeNode"類中創建的一個節點對
象;同樣刪除一個節點,也就是刪除一個"TreeNode"節點對象。

  一. 本文中介紹的程式設計及運行環境

   (1).微軟視窗2000 伺服器版

   (2)..Net Framework SDK 正式版

  二. C#操作TreeView組件中的一些常用方法以及具體實現:

  TreeView組件雖然是一個操作起來比較麻煩的組件,但歸根到
底,可以總結為三種基本操作:加入子節點、加入兄弟節點和刪除
節點。掌握了這三種常用操作,對於在編程中靈活運用TreeView組
件是十分必要的。下麵就分別來加以介紹。

  (1).加入子節點:

  所謂子節點,就是處於選定節點的下一級節點。加入子節點的
具體過程是:首先要在TreeView組件中定位要加入的子節點的位
置,然後創建一個節點對象,然後利用TreeVeiw類中對節點的加入
方法(即:Add ( )方法),加入此節點對象。下麵就是在
treeView1組件中加入一個子節點的具體代碼:

//首先判斷是否選定組件中的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節點" , "提示信息" ,
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//創建一個節點對象,並初始化
TreeNode tmp ;
tmp = new TreeNode ( "節點名稱" ) ;
//在TreeView組件中加入子節點
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}

  (2).加入兄弟節點:

  所謂兄弟節點,就是在選定的節點的平級的節點。加入兄弟節
點的方法和加入子節點的方法基本一致,只是在最後的實現方法上
有著略微的區別。加入兄弟節點的具體步驟,首先也是要確定要加
入的兄弟節點所處的位置,接著定義一個節點對象,最後調用
TreeView類中對兄弟節點加入的方法,加入此節點對象。加入兄弟
節點和加入子節點的最大區別就在於這最後一步。希望讀者能夠註
意。下麵是在TreeView組件加入一個兄弟節點的具體代碼:

//首先判斷是否選定組件中節點的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節點" , "提示信息" ,
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//創建一個節點對象,並初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入兄弟節點
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}

  (3).刪除節點:

  刪除節點就是刪除TreeView組件中選定的節點,刪除節點可以
是子節點,也可以是兄弟節點,但無論節點的性質如何,必須保證
要刪除的節點沒有下一級節點,否則必須先刪除此節點中的所有下
一級節點,然後再刪除此節點。刪除節點比起上面的二個操作要顯
得略微簡單,具體方法是:首先判斷要刪除的節點是否存在下一級
節點,如果不存在,就調用TreeView類中的Remove ( )方法,就可
以刪除節點了。下麵是刪除TreeView組件中節點的具體代碼:

//判斷選定的節點是否存在下一級節點
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//刪除節點
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "請先刪除此節點中的子節點!" , "提示信
息" , MessageBoxButtons.OK ,
MessageBoxIcon.Information ) ;

  (4).TreeView組件的一些其他常用操作:

  其他的一些常用操作比起上面的三種操作,在具體實現上要顯
得簡單許多。這些常用操作無非是,展開所有節點,展開指定的節
點、和摺疊所有節點。下麵就來具體介紹一下:

  < I > .展開所有節點:

  要展開TreeView組件中的所有節點,首先就要把選定的節點指
針定位在TreeView組件的根節點上,然後調用選定組件的ExpandAll
方法就可以了,下麵是具體代碼:

//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展開組件中的所有節點
treeView1.SelectedNode.ExpandAll ( ) ;

  < II > .展開選定節點的下一級節點:

  由於只是展開下一級節點,所以就沒有必要用ExpandAll ( )方
法了。展開下一級節點只需要調用Expand ( )方法就可以了,下麵
是具體的實現代碼:

treeView1.SelectedNode.Expand ( ) ;

  < III > .摺疊所有節點:

  摺疊所有節點和展開所有節點是一組互操作,具體實現的思路
也大致相同,摺疊所有節點也是首先要把選定的節點指針定位在根
節點上,然後調用選定組件的Collapse ( )就可以了,下麵是具體
的實現代碼:

//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//摺疊組件中所有節點
treeView1.SelectedNode.Collapse ( ) ;

  至此已經把在C#操作TreeView組件的常用方法和一般方法基本都介紹完了

三. C#編寫的一個完整操作TreeView組件的例子:

  下麵是C#編寫一個的關於TreeView組件的例子,在這個例子
中,結合以上介紹的常用方法和一般方法,基本覆蓋來TreeView組
件的一些最常用的操作。譬如可以靈活的程式中的TreeView組件
中,進行加入子節點、兄弟節點、刪除節點、摺疊、展開等操作。
其中前三種基本操作是通過程式中彈出菜單中的功能來實現的,後
面操作是通過程式中的按鈕來實現的。下麵是此程式的代碼節略
(TreeView.cs):

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows .Forms ;
using System.Data ;
namespace 全面掌握TreeView組件的使用方法
{
/// Form1 的摘要說明。
public class Form1 : Form
{
private TreeView treeView1 ;
private Button button1 ;
private Button button2 ;
private Button button3 ;
private MenuItem menuItem2 ;
private MenuItem menuItem3 ;
private MenuItem menuItem4 ;
private ContextMenu contextMenu1 ;
private TextBox textBox1 ;
private Label label1 ;
/// 必需的設計器變數。
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
//初始化窗體中的組件
InitializeComponent ( ) ;
}
/// 清理所有正在使用的資源。
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
  //初始化代碼(略)
}
[ STAThread ]
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void AddChildNode ( )
{
//首先判斷是否選定組件中的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節點" , "提示信息" ,
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{



 


//創建一個節點對象,並初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入子節點
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox組件必須填入節點名稱!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
return ;
}
}
}
private void AddParent ( )
{
//首先判斷是否選定組件中節點的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節點" , "提示信息" ,
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{
//創建一個節點對象,並初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入兄弟節點
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox組件必須填入節點名稱!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
return ;
}
}
TreeNode tnode = new TreeNode ( textBox1.Text ) ;
}
private void treeView1_MouseDown ( object sender ,
MouseEventArgs e )
{
if ( e.Button == MouseButtons.Right )
contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;
}
private void button1_Click ( object sender ,
System.EventArgs e )
{
treeView1.SelectedNode.Expand ( ) ;
}
private void menuItem2_Click ( object sender ,
System.EventArgs e )
{
AddChildNode ( ) ;
}
private void menuItem3_Click ( object sender ,
System.EventArgs e )
{
AddParent ( ) ;
}
private void menuItem4_Click ( object sender ,
System.EventArgs e )
{
//判斷選定的節點是否存在下一級節點
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//刪除節點
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "請先刪除此節點中的子節點!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
private void button2_Click ( object sender ,
System.EventArgs e )
{
//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展開組件中的所有節點
treeView1.SelectedNode.ExpandAll ( ) ;
}
private void button3_Click ( object sender ,
System.EventArgs e )
{
//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//摺疊組件中所有節點
treeView1.SelectedNode.Collapse ( ) ;
}
}
}

PS:以上僅供用於學習以及參考,摘抄自@無恨星辰 的隨筆。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 電腦的編程語言類型:編譯型,解釋型 java正是這兩種類型的結合: (1)編輯器編寫java源程式→源文件名:主類名.java (2)將源程式編譯為位元組碼→:位元組碼文件 : 源文件.class (3)利用虛擬機解釋執行。運行過程:載入、代碼校驗、解釋執行 ...
  • 1. 什麼是函數? f(x) = x + 1 y = x + 1 函數是對功能或者動作的封裝 2. 函數的語法和定義 3. 關於函數的返回值 return : 返回 1. 當程式沒寫過return, 不返回任何結果. 如果你非要接收. 接受到的是None 2. 當函數寫return 值, 有一個返回 ...
  • 前言 以博客園為例,爬取我的博客上首頁的發佈時間、標題、摘要,本篇先小試牛刀,先瞭解下它的強大之處,後面講beautifulsoup4的詳細功能。   一、安裝 1.打開cmd用pip線上安裝beautifulsoup4 >pip install beautifulsoup4 &nb ...
  • 新建發送郵件類 爬取英語學習資料 比如爬取英語學習鏈接:http://www.hjenglish.com/new/c1020/,將當前頁文章爬取到併發送郵件到指定郵箱: ...
  • 本節重點不講反射機制,而是講lambda表達式樹來替代反射中常用的獲取屬性和方法,來達到相同的效果但卻比反射高效。 每個人都知道,用反射調用一個方法或者對屬性執行SetValue和GetValue操作的時候都會比直接調用慢很多,這其中設計到CLR中內部的處理,不做深究。然而,我們在某些情況下又無法不 ...
  •  .NET Core實戰項目之CMS 第九章 設計篇 白話架構設計 前面兩篇文章給大家介紹了我們實戰的CMS系統的資料庫設計,源碼也已經上傳到伺服器上了。今天我們就好聊聊架構設計,在開始之前先給大家分享一下這幾天我一直在聽的《從零開始學架構》裡面關於架構設計的定義以及架構設計的三大原則,希望能對大 ...
  • 如今,基於Web版的Office 線上預覽與編輯功能已成為一種趨勢,而關於該技術的實現卻成為了國內大部份公司的技術挑戰,挑戰主要存在於兩方面: 其一:目前國內乃至微軟本身,還沒有相對較為完善的解決方案 其二:對於開發人員來說,可查詢資料甚少,即使翻牆,資料也甚少 基於如上的難點與挑戰,國內規模相對較 ...
  • LeaRun是一款基於.net的敏捷開發框架,框架內置角色、表單、工作流、嚮導式智能開發組件、即時通訊組件、APP開發組件、微信組件、通用許可權等一系列組件,軟體開發人員可以通過一系列簡單配置快速開發出OA、ERP、CRM、HRM、SAAS、MIS、移動APP、微信等眾多高質量信息系統。 官網lear ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...