Mono Gtk#:ButtonPressEvent不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mono Gtk#:ButtonPressEvent不起作用相关的知识,希望对你有一定的参考价值。

我想创建一个简单的应用程序,我需要添加一些按钮事件..但是当我尝试向这个事件添加处理程序到任何Widget(按钮除外)时,它只是不起作用。

当我点击窗口中的任何地方时,它不会打印任何内容。我能做什么?我已经关注(或试图遵循)这个简单的教程:http://mono-project.com/GtkSharpBeginnersGuide

这是我的代码:

public partial class MainWindow : Gtk.Window
{   
    public MainWindow (): base (Gtk.WindowType.Toplevel)
    {
        ButtonPressEvent += new ButtonPressEventHandler(ButtonPressHandler);
        ButtonPressEvent += delegate {Console.WriteLine("test 1");};

        SetDefaultSize(50, 50);
        SetPosition(WindowPosition.Center);
        DeleteEvent += new DeleteEventHandler(OnDeleteEvent);

        VBox vbox = new VBox(false, 2);

        MenuBar mb = new MenuBar();
        Menu filemenu = new Menu();
        MenuItem file = new MenuItem("Soubor");
        file.Submenu = filemenu;
        mb.Append(file);

        vbox.PackStart(mb, false, false, 0);

        GuiBoard board = new GuiBoard(3, 3, true);
        board.Board = new Board(5, 7);

        vbox.PackStart(new Entry(), false, false, 0);
        vbox.PackEnd(board, true, true, 0);

        Add(vbox);
        ShowAll();
    }

    protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    {
        Application.Quit ();
    }

    protected void ButtonPressHandler(object obj, ButtonPressEventArgs args)
    {
        Console.WriteLine("test!");
    }
}

提前致谢

答案

问题是GTK默认情况下不报告事件(来自鼠标或其他方式)(除了像Gtk.Button这样的小部件)。您始终可以通过为Events属性设置适当的掩码来启用事件报告:

Events |= Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask;

Window上设置它足以让用户点击窗口背景时调用按钮按下事件处理程序。如果您有其他小部件,只需设置其Events属性并相应地连接您的处理程序。

另一答案

这对我有用:

AddEvents((int) (Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask));

以上是关于Mono Gtk#:ButtonPressEvent不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mono Gtk#:ButtonPressEvent不起作用

OSx 单声道 gtk 你好世界。 Gtk.Container 抛出异常

GTK#Nodeview Nodestore始终获取空引用

将 Gtk.Widget 打印到打印机的最佳方法是啥?

Gtk TextView - 将光标放置或移动到文本末尾?

关于 mono for android的安装问题