【问题标题】:PopupMenu in Gtk#Gtk 中的弹出菜单#
【发布时间】:2010-11-11 17:13:30
【问题描述】:

我有一个 Gtk 滚动窗口,我正在尝试附加一个 PopupMenuHandler 函数,如下所示:

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,没有处理键盘或鼠标按钮。谁能告诉我为什么这不起作用?

【问题讨论】:

    标签: c# mono gtk gtk# popupmenu


    【解决方案1】:

    1) 不要将弹出菜单添加到GtkScrolledWindow,而是添加到它的内容中。它的大部分事件在默认情况下是禁用的,一般来说,用户真的不希望他们的滚动条上有任何弹出窗口。

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

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

    【讨论】:

    • 感谢您的信息。我已经开始实现 ButtonPressEvent 但对 PopUpMenu 事件很好奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2016-04-15
    相关资源
    最近更新 更多