日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树形视图

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树形视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

樹形視圖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

總結

以上是生活随笔為你收集整理的树形视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。