2012-03-09 108 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); 
};