【问题标题】:How do I get the item (tree node) under the mouse pointer in a TreeView?如何在 TreeView 中获取鼠标指针下的项目(树节点)?
【发布时间】:2012-03-04 15:57:20
【问题描述】:

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

【问题讨论】:

  • 使用 treeview.hittest 方法。就像在这个例子中一样:stackoverflow.com/questions/5750411/…
  • @real_yggdrasil:那是 WPF 的,我正在寻找 GTK# 的答案(使用 Mono)。我已经找到了答案,但是 StackOverflow 不会让我在 8 小时内回答我自己的问题,所以我必须等待......

标签: c# mono gtk gtk# gtktreeview


【解决方案1】:

假设我们想使用鼠标右键选择项目而不使用复选框。下面的 ButtonPress 事件处理程序就是这样做的——它切换我们用 RMB 单击的项目的 selected 属性。然后我们使用 CellDataFuncs 来突出显示选定的项目。 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);

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多