2012-03-09 68 views
0

我需要獲取Gtk.TreeView中的節點位置。我能夠獲得該行和用戶更改的內容,但是我必須強化該列,有什麼方法可以實現?Mono在TreeView中獲取節點位置

下面的代碼:

private void artistNameCell_Edited (object o, Gtk.EditedArgs args) 
{ 
    Gtk.TreeIter iter; 

    musicListStore.GetIter (out iter, new Gtk.TreePath (args.Path)); 

    Song song = (Song) musicListStore.GetValue (iter, 0); 
    song.Artist = args.NewText; 
} 

從這兒http://www.mono-project.com/GtkSharp_TreeView_Tutorial,它是可編輯的文本單元部分。在代碼中,他們只選擇列號0: - /,但我需要用戶點擊任何列。分別確切的節點位置像node[row,column],現在我只有node[iter,0]

+0

的可能重複[TreeView中的鼠標指針下如何獲得該項目(樹節點)?](http://stackoverflow.com/問題/ 9556389 /如何獲得項目樹節點下的鼠標指針在樹視圖) – skolima 2012-03-09 21:11:03

+0

不,此行Item item =(Item)store.GetValue(iter ,0);再次提到第一列: - /我試過了 – user1086004 2012-03-09 21:23:33

回答

0

我跑附帶Windows上的單框架(樣本目錄)的示例程序GTkDemo,我可以編輯樹形視圖編輯細胞樣品,我貼在那裏處理該事件的代碼,

private void TextCellEdited(object o, EditedArgs args) 
{ 
TreePath path = new TreePath(args.Path); 
TreeIter iter; 
store.GetIter(out iter,path); 
int i = path.Indices[0]; 
Item foo = (Item)articles[i]; 
foo.Product = args.NewText; 
store.SetValue (iter, (int) Column.Product, foo.Product); 
} 

其中store是一個ListStore。 我建議你看到完整的源代碼,它包含在Mono Framework for Windows下的 [程序文件(x86)] \ Mono-2.10.8 \ samples \ gtk-sharp-2.0 \ GtkDemo。

我希望這可以幫助你。

0

在GTK + C API中,您將獲得對CellRendererText的引用,作爲信號處理程序的第一個參數。我相信你可以在GTK#中以args.Args [0]的形式訪問它,但我不是100%確定的。

我沒有看到從CellRendererText對象到TreeStore中相應列的顯而易見的方法(但我可能錯了)。爲了有用,您可能需要製作自己的映射。

另一種方法是對每個CellRendererText的Edited事件使用不同的事件處理程序,並確保每個處理程序都知道正確的列號。

0

你可以定義事件處理這樣

int i = counter; 
cellTextRenderer.Edited +=(sender, args) => { 
TreePath path = new TreePath (args.Path); 
TreeIter iter; 
musicListStore.GetIter (out iter, path); 
//i is column number 
musicListStore.SetValue (iter, i, args.NewText); 
};