Mono在TreeView中获取节点位置

时间:2012-03-09 20:56:14

标签: c# mono gtk gtktreeview

我需要在Gtk.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]

3 个答案:

答案 0 :(得分:0)

我运行了Windows上的Mono框架附带的示例程序GTkDemo(示例目录),我可以编辑treeview可编辑单元格样本,我将代码粘贴到处理事件的位置,

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。 我建议你看看完整的源代码,它附带的是Windows下的Mono Framework [程序文件(x86)] \ Mono-2.10.8 \ samples \ gtk-sharp-2.0 \ GtkDemo。

我希望这可以帮助你。

答案 1 :(得分:0)

在GTK + C API中,您将获得对CellRendererText的引用,作为信号处理程序的第一个参数。我相信你可以在GTK#中访问它作为args.Args [0],但我不是百分之百确定。

我没有看到从CellRendererText对象到TreeStore中相应列的明显方法(但我可能错了)。为了使其有用,您可能必须进行自己的映射。

另一种方法是为每个CellRendererText的Edited事件使用不同的事件处理程序,并确保每个处理程序都知道正确的列号。

答案 2 :(得分: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);
};