當前位置:編程學習大全網 - 編程語言 - 在c#的winform TreeView控件中,展開不同的節點,右邊顯示不同的內容。我該怎麽辦?請大家幫幫我,謝謝~

在c#的winform TreeView控件中,展開不同的節點,右邊顯示不同的內容。我該怎麽辦?請大家幫幫我,謝謝~

您可以參考以下信息:

樹形控件是用樹形結構表示元素的壹種方式,是常用的控件之壹。在WPF控件庫中,還提供了樹控件- TreeView。

在WPF,TreeView控件只提供了壹個顯示容器,具體的節點由TreeViewItem完成。TreeView控件的Items屬性指示它包含的子節點。TreeViewItem控件是壹個遞歸控件,它也使用Items屬性來表示子節點,這些子節點越來越深,形成壹個完整的樹結構。

您可以通過TreeView控件的Items屬性添加和刪除其子節點。Items屬性的每個元素都是對象類型,因此它可以包含任何類型的元素。當顯示TreeView時,它會通過元素的ToString()方法自動獲取要顯示的文本。在這壹點上,TreeViewItem和TreeView完全壹致。

TreeView控件不包含節點展開和折疊事件(這與Win窗體中的Tree控件不同),但它包含SelectedItemChanged事件以監視樹結構中選定節點的變化。

TreeViewItem控件有壹個Expanded事件和壹個Collapsed事件,可以監控節點的展開和折疊,並給出相應的處理。

在TextReader的實例中,需要典型的樹形結構來顯示目錄和文件結構,所以TreeView控件是首選。本例通過以下思路完成了目錄的動態加載:

(1)文件系統中的目錄和文件都是TreeView控件中的節點,在TreeViewItem空間中表示,而目錄和文件的詳細路徑保存在TreeViewItem中。標簽屬性。

(2)表單啟動時,操作系統中的所有邏輯分區(例如,C:\,D:\,等。)都是加載的,其實就是目錄。

(3)監視樹中節點的擴展事件。如果第壹次展開目錄,將加載該目錄下的所有子目錄和文件,但不包括子目錄和文件。

(4)監聽TreeView控件的SelectedItemChanged事件,根據當前選中節點的路徑獲取目錄或文件的詳細屬性,並顯示在界面上。

(5)當雙擊TreeView控件中的節點時,如果該節點是文件,則判斷文件類型;如果節點是文本格式文件,則文本內容被加載到界面中。

示例代碼9-18是TextReader中與TreeView控件相關的代碼,其中LoadLogicDrive()方法將系統中的邏輯分區信息加載到TreeView控件中,LoadDicTree()方法將所選目錄中的子目錄和文件加載到目錄節點中。Dic_Expanded()是所有目錄節點的擴展事件處理程序。它首先判斷該目錄是否是第壹次展開,如果是,則加載該目錄下的信息,否則不加載。

示例代碼9-18:

命名空間file viewer {///& lt;總結& gt///window 1 . xaml的交互邏輯///

///& lt;總結& gt///加載指定目錄中的文件和目錄///

//將系統中的邏輯分區信息加載到目錄樹private void LoadLogicDrive( ){//遍歷所有邏輯分區foreach (String drv in directory。GetLogicalDrives()){//創建TreeViewItem對象treeview item TVI = new treeview item();//保存標簽屬性tvi的分區路徑。Tag = drv//設置節點顯示文本tvi。Header = drv//添加擴展的事件處理程序tvi . Expanded+= new routed eventhandler(this . DIC _ Expanded);//是壹個目錄,那麽添加壹個“tmp”字符串子節點作為第壹個擴展標簽tvi。items . Add(" tmp ");//將節點添加到目錄樹this . tvdic . items . Add(tvi);}}

//表單加載事件處理程序privatevoid window _ loaded(對象發送方,路由事件e){ this . tvdic . items . clear();//清除目錄樹中的所有節點。LoadLogicDrive();//加載操作系統中的所有邏輯分區}

//節點展開事件處理程序Voiddic _ expanded(對象發送方,路由事件e){//獲取展開的節點treeviewitemtvi =(treeviewitem)e . source;如果(tvi。Tag == null) //如果節點沒有標簽數據,{ return}如果((tvi。Items.Count == 1)。& amp//如果節點標簽數據為string類型且為“tmp”(tvi . items[0]為string)&;& amp//如果是第壹次展開,將子目錄等信息加載到樹形結構中((string)tvi . items[0]= = " tmp "){ this . loaddictree(tvi);//加載目錄的子目錄和文件}}

//選擇事件處理函數privatevidtvdic _ SelecteditemChanged(對象發送方,RoutedPropertyChangeDevelopments

//目錄樹雙擊事件處理程序Private Void TV DIC _ Mouse雙擊(對象發送方,鼠標按鈕eventargs E){//獲取節點treeview item TVI =(treeview item)this。電視DIC。選擇編輯項目;

If (tvi == null) //如果節點為空,則返回{ return}

如果(tvi。Items . Count & gt0) //是目錄,不是文件,返回{ return}

字符串文件名=(字符串)tvi。標簽;//獲取文件名,如果(!文件。Exists(fileName)) //不存在,所以{ return}//獲取文件信息fileinfo finfo = new fileinfo(文件名);//判斷是否是文本文件開關(finfo . extension . toupper()){ case "。txt "://文本文件case "。LOG": //日誌文件case "。INI": // Ini配置信息案例"。XML": //xml文件案例"。XAML": //xaml代碼文件案例"。BAT": //批處理文件案例"。CPP": //C++代碼文件case "。C": //C,C++頭文件case "。CS": //C#代碼文件case "。VB“://VB代碼文件案例”。HTML": //Html網頁代碼文件case "。ASPX": //ASP。NET代碼文件案例”。VBS": // VBScript代碼文件案例"。JS": //JavaScript代碼文件case "。CSS": //CSS格式定義文件case "。SLN": //VS解決文件本。ViewTxtFile(文件名);//將文本文件加載到界面分隔符中;案例”。RTF”:這個。ViewRtfFile(文件名);//加載rtf文件到界面斷點;Default://提示不支持的文件格式MessageBox。Show("還不支持這種類型的文件查看!",“prompt”,messageboxbutton.ok,messagebox image . information);打破;}}}}

實例TextReader中目錄樹的運行效果如圖9-13所示,其中目錄樹在界面左側,未展開的目錄中不加載任何信息,具體的目錄信息只有在第壹次展開後才會加載。界面右側的屬性頁顯示了當前選中的文件或目錄的詳細屬性,通過代碼中tvDic_SelectedItem Changed()的方法實現。

()圖9-13 TextReader目錄樹運行效果

提示:在實例TextReader中,目錄樹按目錄加載的主要原因是為了提高效率。壹次性加載所有的目錄信息需要很長時間,而且並不是所有的目錄信息都會用到,真正用到的只是其中的壹小部分。

  • 上一篇:桂林山水的作文
  • 下一篇:跨專業保研計算機怎麽補計算機
  • copyright 2024編程學習大全網