我需要在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]
。
答案 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);
};