Mono Gtk#:ButtonPressEvent不起作用

时间:2014-04-28 15:50:04

标签: c# events mono gtk#

我想创建一个简单的应用程序,我需要添加一些按钮事件..但是当我尝试向这个事件添加处理程序到任何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!");
    }
}

提前致谢

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

这对我有用:

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