为什么不得到`ButtonPressEvent`

时间:2016-08-18 06:27:27

标签: c# mono gdk

我正在尝试使用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);
    }

然而,处理程序函数OnDAButtonPressEvent永远不会被调用(通过在那里放置一个断点来检查)。

缺少什么部分?

1 个答案:

答案 0 :(得分:0)

通过查看控制台输出找到问题。

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

这意味着当使用monodevelop和gui设计器时,你必须在widget-&gt; properties-&gt;事件中使用gui设置它们,因为自动生成的Build方法会在实现之前的适当时间设置事件掩码

在调用Build之前在代码中设置事件掩码不起作用(窗口小部件尚未创建);在那次通话之后设置面具也不会工作(他们已经实现了)。