4

次のように PopupMenuHandler 関数をアタッチしようとしている 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 つだけで、キーボードまたはマウス ボタンを処理するイベントはありません。これが機能しない理由を誰か教えてもらえますか?

4

1 に答える 1

2

1) ポップアップ メニューを追加するGtkScrolledWindowのではなく、そのコンテンツに追加します。そのイベントのほとんどはデフォルトで無効になっており、通常、ユーザーはスクロール バーにポップアップが表示されることを望んでいません。

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

メニューを表示するには、マウスとキーボードの両方を取得するシグナルを実装する必要がありButtonPressEventます。ポップアップ メニューの実装に関する GTK+ ドキュメント (ただし、C# ではなく C)。PopupMenu

于 2009-07-20T14:03:35.547 に答える