为什么不获取 `ButtonPressEvent`
Why not getting `ButtonPressEvent`
我正在使用 monodevelop/c#/gdk 进行一些试验,我能够创建一个 window 并使用 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
从未被调用(通过在此处放置断点进行检查)。
缺少的部分是什么?
通过查看控制台输出发现问题。
问题是必须在实现小部件之前设置事件掩码。
这意味着当使用 monodevelop 和 gui 设计器时,您必须在 widget->properties->events 中使用 gui 设置事件处理程序,因为自动生成的 Build
方法将在之前的适当时间设置事件掩码实现。
在调用 Build
之前在代码中设置事件掩码是行不通的(小部件尚未创建);在该调用之后设置掩码也不起作用(它们已经实现)。
我正在使用 monodevelop/c#/gdk 进行一些试验,我能够创建一个 window 并使用 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
从未被调用(通过在此处放置断点进行检查)。
缺少的部分是什么?
通过查看控制台输出发现问题。
问题是必须在实现小部件之前设置事件掩码。
这意味着当使用 monodevelop 和 gui 设计器时,您必须在 widget->properties->events 中使用 gui 设置事件处理程序,因为自动生成的 Build
方法将在之前的适当时间设置事件掩码实现。
在调用 Build
之前在代码中设置事件掩码是行不通的(小部件尚未创建);在该调用之后设置掩码也不起作用(它们已经实现)。