0

在 GTK/GTK#TreeView中,如何获取鼠标指针当前悬停的项目/节点?

4

1 回答 1

1

假设我们想使用鼠标右键选择项目而不使用复选框。下面的ButtonPress事件处理程序就是这样做的——它切换我们用 RMB 单击的项目的 selected 属性。然后我们使用CellDataFunc来突出显示选定的项目。tv是 TreeView,store是底层的 ListStore。

[GLib.ConnectBefore]
void HandleTreeViewButtonPressEvent(object o, ButtonPressEventArgs args)
{
    if (args.Event.Button != 3)
        return;

    TreePath path;
    int x = Convert.ToInt32(args.Event.X);
    int y = Convert.ToInt32(args.Event.Y);
    if (!tv.GetPathAtPos (x, y, out path)) 
        return;

    TreeIter iter;      
    if (!store.GetIter(out iter, path)) 
        return;
    Item item = (Item) store.GetValue (iter, 0);

    item.Selected = !item.Selected;
    tv.QueueDraw();
}

如果我们使用排序的 TreeView,我们必须使用 TreeModelSort 对象而不是 ListStore 对象来获取正确的项目:

    if (!sorted.GetIter(out iter, path)) 
        return;
    Item item = (Item) sorted.GetValue (iter, 0);
于 2012-03-05T00:33:25.540 回答