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