如何在TreeView中获取鼠标指针下的项目(树节点)?

时间:2012-03-04 15:57:20

标签: c# mono gtk gtk# gtktreeview

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

1 个答案:

答案 0 :(得分:1)

假设我们想要使用鼠标右键选择项目而不使用复选框。以下 ButtonPress 事件处理程序就是这样 - 它切换了我们用RMB点击的项目的选定属性。然后,我们使用 CellDataFunc 来突出显示所选项目。 tv 是TreeView,商店是基础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);