在GTK / GTK#TreeView
中,如何获取鼠标指针当前悬停的项目/节点?
答案 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);