C# 为什么不按下按钮呢`

C# 为什么不按下按钮呢`,c#,mono,gdk,C#,Mono,Gdk,我正在使用monodevelop/c#/gdk进行一些实验,我能够创建一个带有DrawingArea的窗口来正确处理暴露事件 但是鼠标按下事件没有被发送,我不明白为什么。已在gui设计器自动生成的代码中设置委托: this.da.ExposeEvent += new global::Gtk.ExposeEventHandler (this.OnDAExposeEvent); this.da.ButtonPressEvent += new global::Gtk.ButtonPressEventH

我正在使用monodevelop/c#/gdk进行一些实验,我能够创建一个带有
DrawingArea
的窗口来正确处理暴露事件

但是鼠标按下事件没有被发送,我不明白为什么。已在gui设计器自动生成的代码中设置委托:

this.da.ExposeEvent += new global::Gtk.ExposeEventHandler (this.OnDAExposeEvent);
this.da.ButtonPressEvent += new global::Gtk.ButtonPressEventHandler (this.OnDAButtonPressEvent);
this.da.MotionNotifyEvent += new global::Gtk.MotionNotifyEventHandler (this.OnDAMotionNotifyEvent);
这是我的初始化代码:

public MainWindow () : base (Gtk.WindowType.Toplevel)
    {
        Build ();
        Gdk.Color col = new Gdk.Color();
        col.Red = col.Green = col.Blue = 0x8888;
        da.ModifyBg(StateType.Normal, col);
        var p = "wr/wn/wb/wq/wk/wp/br/bn/bb/bq/bk/bp".Split ('/');
        for (int i = 0; i < p.Length; i++) {
            pieces[p[i]] = new ImageSurface("/home/agriffini/x/chessboard/i" + p [i] + ".png");
        }
        da.Events |= (Gdk.EventMask.ButtonPressMask
                      | Gdk.EventMask.ButtonReleaseMask
                      | Gdk.EventMask.KeyPressMask
                      | Gdk.EventMask.PointerMotionMask);
    }
公共主窗口():基本(Gtk.WindowType.Toplevel) { 构建(); Gdk.Color col=新的Gdk.Color(); 红色=绿色=蓝色=0x8888; da.ModifyBg(StateType.Normal,col); var p=“wr/wn/wb/wq/wk/wp/br/bn/bb/bq/bk/bp”。拆分('/'); 对于(int i=0;i 但是,从未调用处理程序函数
OnDAButtonPressEvent
(通过在此处放置断点进行检查)


缺少的部分是什么?

通过查看控制台输出发现问题

问题是在实现小部件之前必须设置事件掩码

这意味着,当使用monodevelop和gui设计器时,必须在widget->properties->events中使用gui设置事件处理程序,因为自动生成的
Build
方法将在实现之前的适当时间设置事件掩码


在调用
Build
之前在代码中设置事件掩码将不起作用(小部件尚未创建);在调用之后设置掩码也不起作用(它们已经实现)。

在我的例子中,我有一个复合自定义小部件(一个包含一个标签和两个带有不同附件级别的Buton的表)。当我按下按钮时,它会在按钮PressEvent上触发。这些信号似乎没有得到处理。我只能处理Gdk.ExposeEvent。我相信这是因为它不再被认为是一个单独的widget/对于谷歌的人来说