Как получить элемент (узел дерева) под указателем мыши в TreeView? - PullRequest
0 голосов
/ 04 марта 2012

В GTK / GTK # TreeView как получить элемент / узел, над которым в данный момент находится указатель мыши?

1 Ответ

1 голос
/ 05 марта 2012

Допустим, мы хотим выбирать элементы, используя правую кнопку мыши, без использования флажков. Следующий обработчик события ButtonPress делает именно это - он переключает выбранное свойство элемента, который мы щелкнули с помощью RMB. Затем мы используем CellDataFunc s, чтобы выделить выбранные элементы. 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);
...