【问题标题】:Mono getting node position in TreeViewMono在TreeView中获取节点位置
【发布时间】:2012-03-09 20:56:14
【问题描述】:

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

【问题讨论】:

标签: c# mono gtk gtktreeview


【解决方案1】:

我在 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。 我建议您查看完整的源代码,它随 Windows 的 Mono 框架一起提供,位于 [程序文件(x86)]\Mono-2.10.8\samples\gtk-sharp-2.0\GtkDemo.

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你可以像这样定义事件处理程序

      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);
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-14
        • 2017-05-13
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        相关资源
        最近更新 更多