2009-07-17 8 views
3

に私はあまりにもとても似PopupMenuHandler機能を添付しようとしているウィンドウのGtkをスクロールしている:の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を処理するイベントは1つだけあり、キーボードやマウスのボタンは何も処理しません。誰も私がなぜこれが動作していないのか教えてもらえますか?

答えて

2

1)GtkScrolledWindowにポップアップメニューを追加しないでください。ほとんどのイベントはデフォルトで無効になっていますが、一般的にユーザーはスクロールバーにポップアップを表示したくありません。

2)PopupMenuシグナルは、マウスの右クリックではなく、キーボードショートカット(Shift + F10またはメニューボタン)に対してのみ呼び出されます。 GtkStatusIconGtkWidgetから派生していないため、動作が異なります。

マウスとキーボードの両方にメニューを表示するには、ButtonPressEventPopupMenu信号を実装する必要があります。 GTK+ documentation on implementing popup menu (C, not C# though).

+0

ありがとうございました。私は既にButtonPressEventを実装し始めましたが、PopUpMenuイベントについて興味がありました。 – AvatarOfChronos