2009-07-17 4 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, поэтому он работает по-разному.

Вам необходимо реализовать сигналы ButtonPressEvent и PopupMenu, чтобы отобразить меню и мышь, и клавиатуру. GTK+ documentation on implementing popup menu (C, not C# though).

+0

Благодарим за информацию. Я уже начал реализацию ButtonPressEvent, но мне было интересно узнать о событии PopUpMenu. – AvatarOfChronos