2009-07-17 63 views
3

我有一个GTK滚动,我试图以附加PopupMenuHandler功能太像这样的窗口:的PopupMenu在Gtk#的

this.scrolledwindow1.PopupMenu += HandlePopupMenu; 

和HandlePopupMenu看起来像这样:

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

我的问题当我右键单击滚动的窗口时,此事件永远不会被调用。我假设它应该基于this。只有一个事件处理ScrollEvent,没有处理键盘或鼠标按钮。有人可以告诉我为什么这不起作用吗?

回答

2

1)不要将弹出菜单添加到GtkScrolledWindow,而是添加到它的内容。它的大部分事件在默认情况下都是禁用的,一般情况下,用户确实不希望在其滚动条上出现任何弹出窗口。

2)PopupMenu仅对键盘快捷键(Shift + F10或菜单按钮)调用信号,而不是鼠标右键单击。 GtkStatusIcon不是从GtkWidget派生的,所以它的工作方式不同。

您需要实现ButtonPressEventPopupMenu信号才能使鼠标和键盘显示菜单。 GTK+ documentation on implementing popup menu (C, not C# though).

+0

感谢您的信息。我已经开始实施ButtonPressEvent,但对PopUpMenu事件感到好奇。 – AvatarOfChronos 2009-07-20 17:33:14