Mono Gtk#:ButtonPressEvent不起作用

问题描述 投票:2回答:2

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

提前致谢

c# events mono gtk#
2个回答
2
投票

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

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

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


0
投票

这对我有用:

AddEvents((int) (Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask));
© www.soinside.com 2019 - 2024. All rights reserved.