4 votes

PopupMenu dans Gtk#

J'ai une fenêtre déroulante Gtk à laquelle j'essaie d'attacher une fonction PopupMenuHandler comme suit :

this.scrolledwindow1.PopupMenu += HandlePopupMenu;

et le HandlePopupMenu ressemble à ceci :

[GLib.ConnectBefore]
public void HandlePopupMenu(object o, PopupMenuArgs args)
{
   Console.WriteLine("test");
   Gtk.Menu mbox = new Gtk.Menu();
   Gtk.MenuItem Test = new Gtk.MenuItem("test");
   Test.Activated += delegate(object sender, EventArgs e) {
      Console.WriteLine("test");
   };
   mbox.Append(Test);
   mbox.ShowAll();
   mbox.Popup();    
}

Mon problème est que cet événement n'est jamais appelé lorsque je clique avec le bouton droit de la souris sur la fenêtre déroulante, alors que je suppose qu'il devrait l'être en vertu de la règle suivante cette . Il n'y a qu'un seul autre événement qui gère l'événement ScrollEvent, et rien qui gère les boutons du clavier ou de la souris. Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas ?

2voto

Ivan Baldin Points 1286

1) N'ajoutez pas de menu popup à GtkScrolledWindow mais à sa guise. La plupart de ses événements sont désactivés par défaut et, en général, les utilisateurs ne veulent pas de fenêtres contextuelles sur leurs barres de défilement.

2) PopupMenu Le signal n'est invoqué que pour les raccourcis clavier (Shift+F10 ou bouton Menu), pas pour les clics droits de la souris. GtkStatusIcon n'est pas dérivé de GtkWidget et fonctionne donc différemment.

Vous devez mettre en œuvre ButtonPressEvent y PopupMenu signale que la souris et le clavier affichent tous deux le menu. Documentation GTK+ sur l'implémentation d'un menu contextuel (en C, pas en C#).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X