【问题标题】:How to make Gtk.ListBoxRow accept right clicks on any area?如何让 Gtk.ListBoxRow 接受任何区域的右键单击?
【发布时间】:2017-07-23 16:18:03
【问题描述】:

编辑:更正代码。

ListBox listBox = new ListBox ();
ListBoxRow row = new ListBoxRow ();
row.add (new Label ("Test row"));
row.button_release_event.connect ((event) => {
    if (event.button == 3) {
        debug ("Right button clicked.\n");
    }
    return false;
});
listBox.add (row);

不起作用。什么都不打印。但是这个另一个工作正常

ListBox listBox = new ListBox ();
ListBoxRow row = new ListBoxRow ();
row.add (new CheckButton.with_label ("Test row"));
row.button_release_event.connect ((event) => {
    if (event.button == 3) {
        debug ("Right button clicked.\n");
    }
    return false;
});
listBox.add (row);

因为它打印调试消息。是否可以在任何区域上处理 ListBoxRow 的右键单击,无论其子项是什么?

【问题讨论】:

    标签: user-interface gtk3 vala


    【解决方案1】:

    解决这个问题的一个方法是使用 Gtk.EventBox 作为每个 Gtk.ListBoxRow 的直接子级,然后使用 EventBox 作为行内容的容器:

    ListBox listBox = new ListBox ();
    ListBoxRow row = new ListBoxRow ();
    EventBox box = new EventBox ();
    box.add (new Label ("Test row"));
    row.add (box);
    row.button_release_event.connect ((event) => {
        if (event.button == 3) {
            debug ("Right button clicked.\n");
        }
        return false;
    });
    listBox.add (row);
    

    【讨论】:

    • 谢谢。它工作得非常整齐。对,append_val 不是 ListBox 的方法。我将它与问我问题时的 GLib.Array 混合在一起。我将编辑问题并修复它。谢谢。
    • @g_l 好的,我将删除旁注。祝你好运
    • 没关系,你不必删除它。如果你愿意,你可以。 :)
    • @g_l 更好。这只是问题/答案中的噪音。谢谢 ;) GL
    • 好的。我还将更改我的编辑头注,然后以匹配流程。完成。
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多