0

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

4

3 回答 3

0

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

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

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

于 2012-03-12T04:16:13.543 回答
0

我在 Windows 上运行了 Mono 框架附带的示例程序 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。我建议您查看完整的源代码,它在 [Program files(x86)]\Mono-2.10.8\samples\gtk-sharp-2.0\GtkDemo 下随 Mono Framework for Windows 一起提供。

我希望这可以帮助你。

于 2012-03-09T22:39:11.913 回答
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);
};
于 2015-05-11T19:02:17.643 回答