0

GTK/GTK#TreeViewで、マウス ポインターが現在ホバリングしているアイテム/ノードを取得するにはどうすればよいですか?

4

1 に答える 1

1

チェックボックスを使用せずに、マウスの右ボタンを使用して項目を選択したいとしましょう。次のButtonPressイベント ハンドラーはまさにそれを行います。RMB でクリックした項目の選択されたプロパティを切り替えます。次に、CellDataFuncを使用して、選択した項目を強調表示します。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 を使用している場合は、ListStore オブジェクトの代わりに TreeModelSort オブジェクトを使用して正しい項目を取得する必要があります。

    if (!sorted.GetIter(out iter, path)) 
        return;
    Item item = (Item) sorted.GetValue (iter, 0);
于 2012-03-05T00:33:25.540 に答える