树形视图
?
樹形視圖TreeView估計是Gtk#里面最復雜的控件了,它使用了大名鼎鼎的MVC模式組織數據。雖然入門有點麻煩,但是你真正掌握之后,才能發現這種設計的靈活和強大。
我這個學習系列是根據Gtk#的官方指南總結的學習心得,當然也不僅僅是對官方指南的純粹翻譯。如果想要直接閱讀官方指南的話,可以訪問這里:
http://www.mono-project.com/GtkSharp_TreeView_Tutorial
?
Treeview是根據MVC模式進行組織的,它一共可以分為三個部分。模型(Model)部分存儲要顯示的數據,視圖(View)部分控制數據如何顯示,而控制器(Controller)部分則控制那些數據用來顯示,以及如何對數據進行過濾,排序等等。
Model(模型):
TreeView有兩種最基本的數據模型(Model):一種是ListStore,它用來存儲的列表形式組織的數據;另一種是TreeStore,它用來組織那種有子節點的(就像一棵樹一樣)的數據。
所有的TreeView數據模型(Model)都從TreeModel接口實現。
View(視圖):
視圖由三部分組成:分別是TreeViewColumn,CellRenderer和TreeView窗體(Widget)本身。
其中TreeView窗體負責按行(Row)和列(Column)來布局數據,而且提供基本的交互式操作(比如選擇行等等)。?
TreeViewColumn代表一列,一個TreeView視圖可以包含多個列。
而每一列又由至少一個CellRenderer組成,TreeViewColumn本身不負責單元(Cell)的渲染,它的渲染由CellRenderer控制。
而CellRenderer是一個抽象類,它有多個實現。我們可以按照需要實例我們需要的CellRenderer,如果默認的實現不能滿足我們的需要。也可以實現一個CellRenderer的子類,定制我們的渲染器。
- CellRendererText 用來顯示文本
- CellRendererPixbuf 用來顯示像素圖
- CellRendererProgress 顯示一個進度條
- CellRendererCombo?
- CellRendererToggle
CellRenderer從TreeViewColumn分離出來,使得設計更加靈活。就像前面所述一個TreeViewColumn可以包含多個CellRenderer,這使得我們可以在一列中同時加入一個圖像和一條文本,有時候這要比把圖像和文本分置在兩個單獨列要美觀的多。
控制器(Controller):
控制器讓你可以對傳遞給視圖的進行修改(過濾或者排列要顯示的數據)。
下面是一個完整的例子,雖然我們沒有加入任何數據。但是它對已經演示了TreeView的基本結構。
?1using?System;?2using?Gtk;
?3
?4public?class?TreeViewExample
?5{
?6????public?static?void?Main(string[]?argv)
?7????{
?8????????Application.Init();
?9????????new?TreeViewExample();
10????????Application.Run();
11????}
12
13????public?TreeViewExample()
14????{
15????????//新建一個Window類,并且設置它的最小尺寸(500,200)
16????????Window?window?=?new?Window("TreeView?Example");
17????????window.SetSizeRequest(500,200);
18????????window.DeleteEvent?+=?Delete;???//添加Delete事件處理
19
20????????TreeView?tree?=?new?TreeView();?//新建TreeView對象
21????????//新建一個TreeViewColumn,標題為Artist
22????????TreeViewColumn?artistCol?=?new?TreeViewColumn();
23????????artistCol.Title?=?"Artist";
24
25????????TreeViewColumn?songCol=?new?TreeViewColumn();
26????????songCol.Title?=?"Song";
27????????//把兩個Column加入到TreeView視圖中
28????????tree.AppendColumn(artistCol);
29????????tree.AppendColumn(songCol);
30????????
31????????//新建一個ListStore?Model,它里面每行(Row)存儲兩個string對象(Column)
32????????ListStore?musicList?=?new?ListStore(typeof(string),typeof(string));
33????????//給視圖TreeView設置模型(Model)
34????????tree.Model?=?musicList;
35????????window.Add(tree);?//把視圖加入到窗體中
36????????window.ShowAll();???//顯示窗體
37????}
38
39????private?void?Delete(object?o,DeleteEventArgs?args)
40????{
41????????Application.Quit();
42????}
43}
?
?
使用vim鍵入所有代碼后,你就可以進行編譯了
mcs?-pkg:gtk-sharp-2.0?TreeViewExample.cs?
運行
mono?TreeViewExample.exe?
?
?
?運行結果。
?
?
轉載于:https://www.cnblogs.com/YunQiDick/p/10027807.html
總結
- 上一篇: SQLSERVER 和 ORACLE 查
- 下一篇: 图的遍历[摘录自严长生老师的网站]