2009-07-17 40 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