Wie kann ich ein Kontextmenü auf einen Baumknoten in Gtk # hinzufügen?
-
11-09-2019 - |
Frage
Ich möchte ein Kontextmenü zu einem Baum Knoten hinzuzufügen, die mir den Baumknoten löschen können.
Lösung
Es kann getan werden:
- Umgang mit dem ButtonPressEvent des NodeView. Sie haben die GLib.ConnectBeforeAttribute an den Ereignishandler zu übernehmen.
- ein Menü erstellen und es ist Popup () -Methode, wenn die rechte Maustaste gedrückt wurde aufgerufen wird.
- 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