Frage

Ich möchte ein Kontextmenü zu einem Baum Knoten hinzuzufügen, die mir den Baumknoten löschen können.

War es hilfreich?

Lösung

Es kann getan werden:

  1. Umgang mit dem ButtonPressEvent des NodeView. Sie haben die GLib.ConnectBeforeAttribute an den Ereignishandler zu übernehmen.
  2. ein Menü erstellen und es ist Popup () -Methode, wenn die rechte Maustaste gedrückt wurde aufgerufen wird.
  3. Umgang mit dem ButtonPressEvent des Menüpunktes und mit Hilfe des NodeSelection Eigenschaft NodeView den Knoten löschen.

mit einem leeren Fenster startet Code würde wie folgt aussehen:

using System;
using Gtk;

public partial class MainWindow: Gtk.Window
{   
    NodeView myNodeView;
    NodeStore store;

    public MainWindow (): base (Gtk.WindowType.Toplevel)
    {
        Build ();

        store = new Gtk.NodeStore (typeof (MyTreeNode));
        store.AddNode (new MyTreeNode ("Item A"));
        store.AddNode (new MyTreeNode ("Item B"));
        store.AddNode (new MyTreeNode ("Item C"));

        myNodeView = new NodeView(store);
        myNodeView.ButtonPressEvent += new ButtonPressEventHandler(OnItemButtonPressed);

        myNodeView.AppendColumn ("Deletable items", new Gtk.CellRendererText (), "text", 0);
        myNodeView.ShowAll ();
        Add (myNodeView);
    }

    [GLib.ConnectBeforeAttribute]
    protected void OnItemButtonPressed (object sender, ButtonPressEventArgs e)
    {
        if (e.Event.Button == 3) /* right click */
        {
            Menu m = new Menu();
            MenuItem deleteItem = new MenuItem("Delete this item");
            deleteItem.ButtonPressEvent += new ButtonPressEventHandler(OnDeleteItemButtonPressed);
            m.Add(deleteItem);
            m.ShowAll();
            m.Popup();
        }
    }                                                           

    protected void OnDeleteItemButtonPressed (object sender, ButtonPressEventArgs e)
    {
        MyTreeNode node = (MyTreeNode)myNodeView.NodeSelection.SelectedNode;
        store.RemoveNode(node);
    }

    protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    {
        Application.Quit ();
        a.RetVal = true;
    }
}

public class MyTreeNode : Gtk.TreeNode {

    public MyTreeNode (string text)
    {
        ItemText=text;
    }

    [Gtk.TreeNodeValue (Column=0)]
    public string ItemText {get; set;}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top