2009-07-17 10 views
3

Ich habe ein Gtk Fenster gescrollt, die ich versuche, eine PopupMenuHandler Funktion auch wie so anbringt:PopupMenu in Gtk #

this.scrolledwindow1.PopupMenu += HandlePopupMenu; 

und die HandlePopupMenu sieht so aus:

[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();  
} 

Mein Problem ist, dass dieses Ereignis nie aufgerufen wird, wenn ich mit der rechten Maustaste auf das Bildlauffenster klicke. was ich annehme sollte es auf this basieren. Es gibt nur ein anderes Ereignis, das ScrollEvent behandelt, und nichts, das Tastatur- oder Maustasten behandelt. Kann mir jemand sagen, warum das nicht funktioniert?

Antwort

2

1) Fügen Sie kein Popup-Menü zu GtkScrolledWindow hinzu, sondern zum Inhalt. Die meisten Ereignisse sind standardmäßig deaktiviert, und im Allgemeinen möchten Benutzer keine Popups in ihren Bildlaufleisten.

2) PopupMenu Das Signal wird nur für Tastenkombinationen (Umschalt + F10 oder Menü-Taste) aufgerufen, nicht für Mausklicks. GtkStatusIcon ist nicht von GtkWidget abgeleitet, so dass es anders funktioniert.

Sie müssen die Signale ButtonPressEvent und PopupMenu implementieren, um Maus und Tastatur zur Anzeige des Menüs zu erhalten. GTK+ documentation on implementing popup menu (C, not C# though).

+0

Danke für die Info. Ich hatte bereits mit der Implementierung von ButtonPressEvent begonnen, war aber neugierig auf das Ereignis PopUpMenu. – AvatarOfChronos