【问题标题】:Selecting GTK Treeview item from Code从代码中选择 GTK Treeview 项目
【发布时间】:2015-02-03 11:10:52
【问题描述】:

在我将一些项目添加到 GTK 树视图后,我需要从代码中选择列表中的第一个项目以触发 treeviewcursorchanged 事件,即:单击树视图项目时。我需要选择第一个树视图项目。但是没有选择事件。 我用字符串填充树视图

    liststore = new ListStore (typeof(string));
    treeview1.Model = liststore;  

【问题讨论】:

    标签: c# mono treeview gtk gtk#


    【解决方案1】:

    您必须使用与Gtk.TreeView 关联的Gtk.TreeSelection。要选择第一行,只需执行以下操作:

    Gtk.TreeIter iter;
    if (liststore.GetIterFirst(out iter))
        treeview1.Selection.SelectIter(iter);
    

    这是一个完整的示例,它创建了一个列表视图/模型,向选择更改事件添加了一个信号处理程序,然后将第一行设置为选中:

    var view = new Gtk.TreeView();
    var cell = new Gtk.CellRendererText();
    var col1 = new Gtk.TreeViewColumn();
    col1.Title = "Column 1"
    col1.PackStart(cell, true);
    col1.AddAttribute(cell, "text", 0);
    
    view.AppendColumn(col1);
    
    var model = new Gtk.ListStore(typeof(string));
    model.AppendValues("AAA");
    model.AppendValues("BBB");
    model.AppendValues("CCC");
    
    view.Model = model;
    
    // This is the selection changed handler: I use a lambda but
    // it is as easy to use a delegate `Changed` is a standard C#
    // event.
    view.Selection.Changed += (sender, e) => {
        Console.WriteLine("SELECTION WAS CHANGED");
        Gtk.TreeIter selected;
        if (view.Selection.GetSelected(out selected)) {
            Console.WriteLine("SELECTED ITEM: {0}", model.GetValue(selected, 0)));
        }
    };
    
    Gtk.TreeIter iter;
    if (model.GetIterFirst(out iter))
         view.Selection.SelectIter(iter);
    

    【讨论】:

    • 谢谢,它选择了第一个项目,但没有触发光标更改事件。我在选择项目时使用此事件运行代码。这不是正确的事件吗?
    • 您是否尝试过使用 Gtk.TreeView.Selection.SelectionChanged 事件?
    • 抱歉回复晚了,正在忙其他事情。没有这样的活动请看docs.go-mono.com/?link=T%3aGtk.TreeView
    • 事件在选择上而不是在 TreeView 上;)
    • 你能告诉我如何获取所选行的索引吗?
    【解决方案2】:

    GtkTreeView 中的选择逻辑被分离到它自己的类 GtkTreeSelection。每个GtkTreeView 都有自己的GtkTreeSelection,可通过gtk_tree_view_get_selection() 获得。

    获得GtkTreeSelection 后,您只需为要选择的行获取GtkTreeIter 并调用gtk_tree_selection_select_iter()。您还可以构建一个GtkTreePath 并使用gtk_tree_selection_select_path() 选择它。

    如何获得GtkTreeIterGtkTreePath 取决于您。 These are the methods that apply to GtkTreePaths and GtkTreeModels. GtkListStore 也是 GtkTreeModelhas its own methods

    【讨论】:

    • 感谢您的解释。但正在寻找 c# 中的特定内容
    • 任何语言都一样。您将需要为您的绑定集找到正确的方法名称(它们可能类似于select_iter() 左右),并且可能会散布各种refs 和outs。 Mono 文档网站上的 Gtk.TreeSelectionGtk.TreeModelGtk.TreePath 页面应该会有所帮助……如果这些是正确版本的 GTK+。
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多